Skip to content

Instantly share code, notes, and snippets.

@mitulbhalia
Forked from tgreiser/android_video.js
Last active August 29, 2015 14:24
Show Gist options
  • Save mitulbhalia/2a6398913373c008b114 to your computer and use it in GitHub Desktop.
Save mitulbhalia/2a6398913373c008b114 to your computer and use it in GitHub Desktop.
/**
* This sample lets you record and share video with Appcelerator Titanium on Android.
* Tested on 3.2.1 of TITANIUM MOBILE SDK, should work on 3.x. I don't know about previous versions.
*
* Based on https://gist.github.com/dawsontoth/832488
* which does not fire the activity callback on 3.x
*/
/**
* First, create our UI. We'll have two buttons: record, and share.
*/
var win = Titanium.UI.createWindow({
title: 'Video Recording from Appcelerator Titanium',
backgroundColor: '#fff'
});
var recordButton = Titanium.UI.createButton({
top: 10, left: 10, right: 10, height: 35, title: 'Record Video'
});
win.add(recordButton);
var shareButton = Titanium.UI.createButton({
top: 50, left: 10, right: 10, height: 35,
title: 'Share Recorded Video', visible: false
});
win.add(shareButton);
var saveButton = Titanium.UI.createButton({
top: 100, left: 10, right: 10, height: 35,
title: 'Save Recorded Video', visible: false
});
win.add(saveButton);
win.open();
/**
* We'll use the following variable to keep track of the result of our recording action.
*/
var videoUri = null;
/**
* When they click this, we'll start the video capture activity and wait to hear back from it.
*/
recordButton.addEventListener('click', function() {
// http://developer.android.com/reference/android/provider/MediaStore.html
var intent = Titanium.Android.createIntent({ action: 'android.media.action.VIDEO_CAPTURE' });
Ti.API.debug('Intent created...');
var curActivity = win.getActivity();
curActivity.startActivityForResult(intent, function(e) {
Ti.API.debug('Callback received...');
if (e.error) {
Ti.UI.createNotification({
duration: Ti.UI.NOTIFICATION_DURATION_LONG,
message: 'Error: ' + e.error
}).show();
} else {
if (e.resultCode === Titanium.Android.RESULT_OK) {
videoUri = e.intent.data;
Ti.UI.createNotification({
duration: Ti.UI.NOTIFICATION_DURATION_LONG,
message: 'Video captured; now share or save it!'
}).show();
// note that this isn't a physical file! it's a URI in to the MediaStore.
shareButton.visible = true;
saveButton.visible = true;
} else {
Ti.UI.createNotification({
duration: Ti.UI.NOTIFICATION_DURATION_LONG,
message: 'Canceled/Error? Result code: ' + e.resultCode
}).show();
}
}
});
});
/**
* When they click this, we'll start an activity with an intent chooser to let the user
* choose how they want to share their video.
*/
shareButton.addEventListener('click', function() {
var intent = Titanium.Android.createIntent({
action: Titanium.Android.ACTION_SEND,
type: 'application/octet-stream'
});
intent.putExtraUri(Titanium.Android.EXTRA_STREAM, videoUri);
Titanium.Android.currentActivity.startActivity(
Titanium.Android.createIntentChooser(intent, 'Send Video via'));
});
/**
* When they click this, we'll save the video to the SDCard and tell the user where to find it.
*/
saveButton.addEventListener('click', function() {
var source = Ti.Filesystem.getFile(videoUri);
var target = Ti.Filesystem.getFile('appdata://sample.3gp');
// note: source.exists() will return false, because this is a URI into the MediaStore.
// BUT we can still call "copy" to save the data to an actual file
source.copy(target.nativePath);
Ti.UI.createNotification({
duration: Ti.UI.NOTIFICATION_DURATION_LONG,
message: 'Saved to: ' + target.nativePath
}).show();
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment