Overview
This tutorial will walk you through a basic app that allows the user to access the mobile device's camera and shoot pictures and videos. We will cover a generic project setup, set device permissions, and create a small app that allows for taking pictures.
Project setup
Start with creating an empty Alloy project by executing this command: appc new
Permissions
For Android, the build system will automatically add the needed "android.permission.CAMERA" and "android.permission.WRITE_EXTERNAL_STORAGE" permissions to the AndroidManifest.xml for you. So, you don't need to edit the tiapp.xml file.
For iOS, you need to add the following key(s) to the tiapp.xml:
|
1
2
3
4
5
6
7
8
9
10
11
12
|
<ios> <plist> <dict> <key>NSCameraUsageDescription</key> <string>Need camera access to take pictures</string> <!-- Only needed when recording audio, such as via camera video capture.
--> <key>NSMicrophoneUsageDescription</key> <string>Need microphone access to record video with audio</string> </div> </plist></ios> |
Say cheese
It is time to open the camera! We add a simple button to our view and add
a click event to it, so we can open the camera.
|
1
2
3
4
5
|
<Alloy> <Window> <Button id="btn_record" title="Take a picture" onClick="onClickRecord" /> </Window></Alloy> |
The below code implements the button click event to request camera permission (if not currently granted) and then show the camera.
function onClickRecord(e) { // Request the user's permission to use the camera. // If already granted, then callback will be invoked without showing dialog. Ti.Media.requestCameraPermissions(function (e) { // Do not continue if permission was denied. if (!e.success) { alert('This app does not have permission to use the camera.'); return; } // Show the camera for taking a picture. Ti.Media.showCamera({ success: function (e) { console.log('Photo was successfully taken via camera.'); // $.imageView.image = e.media; // do this to }, cancel: function (e) { console.log('Camera canceled.'); }, error: function (e) { console.error('Failed to show camera. Reason: ' + e.error); if (e.code === Titanium.Media.NO_CAMERA) { alert('Device does not have a camera.'); } } }); });} |
The showCamera() method has some properties you can set to change some options and
to get the image. For a full list, please review CameraOptionsType API documentation.
You can also add a custom overlay to the camera with the overlay property which is assigned a view. When doing this, you have to display
your own buttons to take a picture or cancel out and use the Ti.Media.takePicture() and Ti.Media.hideCamera() functions. On Android, using an overlay will display an in-app camera
activity instead of displaying the default camera app installed on the
device for taking photos.
This tutorial was adapted from https://devblog.axway.com/mobile-apps/from-zero-to-app-with-a-camera/ which was originally written by Michael Gangolf