プロジェクトの作成
WebIDEを利用したプロジェクトの準備
それでは早速アプリを制作していきましょう。まずは雛形となる空のプロジェクトを作ります。Firefox OSアプリの制作には、ブラウザ版のFirefoxに搭載されている、WebIDEを利用します。WebIDEについて詳しくは、第1回の内容をご覧ください。
[ツール] ‐[Web 開発] ‐[WebIDE] からWebIDEのウィンドウを開き、[アプリを開く] ‐[新規アプリ...] でテンプレートの選択画面を表示します。今回は特権アプリを作成するので、[Privileged Empty App] を選びます。今回作成するアプリの名前は「fxcam」としました。
アプリマニフェストの編集
Camera APIを利用できるようにするためには、アプリマニフェストにパーミッションを追加する必要があります。
プロジェクトルートにある「manifest.webapp」に"type"と"permissions"の項目を追加します。
...(略) "type": "privileged", "permissions": { "camera": {}, "device-storage:pictures":{ "access": "readwrite" } }, ...(略)
"permissions"の項目では、カメラへのアクセスを許可する "camera" の他に、撮影した写真を端末のストレージに保存するため、"device-storage:pictures" を指定します。
カメラ機能の作成(1)
さて、それではカメラアプリの機能を作成していきましょう。
Camera APIを利用したカメラへのアクセス
カメラにアクセスするには、navigator.mozCamera.getCamera()を利用します。第一引数に指定するオブジェクトは、navigator.mozCamera.getListOfCameras()で取得できるものを利用します。
// カメラリソース var camera; function releaseCamera() { console.log('releaseCamera'); if(camera) { camera.release(); } } function getCamera() { console.log('getCamera'); // カメラ取得時のオプション var options = { mode: 'picture', recorderProfile: 'jpg', previewSize: { width: 1280, height: 720 } }; // `getListOfCameras()`は背面カメラ、前面カメラの順に配列が返る var type = navigator.mozCameras.getListOfCameras()[0]; function onSuccess(success) { // スコープ外に値を保持 camera = success; console.log('getCamera:success', camera); // カメラ取得成功時の処理 } function onError(error) { console.warn('getCamera:error', error); // カメラ取得失敗時の処理 } // カメラがすでに取得されている場合はリリース releaseCamera(); navigator.mozCameras.getCamera(type, options, onSuccess, onError); }
カメラ取得に成功すると、成功時のコールバックonSuccess()の引数としてCameraControlオブジェクトが取得できます。
なお、初回のカメラアクセス時には、画面上にカメラへのアクセス許可を求める画面が出てきます。
カメラがすでに取得されている場合は、エラーとなってしまうので、取得前には必ず既存のCameraControlオブジェクトをリリースするようにします。カメラが取得できない場合、コンソールにはHardwareClosedと表示されます。こうなってしまったら、一度アプリを停止して再起動しましょう。