-
-
Save mitulbhalia/2a6398913373c008b114 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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