W3C非標準のAPI
カメラAPI
カメラAPIは、その名の通りカメラを制御するAPIです。Firefox OSでカメラを制御する方法は、inputタグ、カメラAPI、getUserMediaの3つがありますが、ここではカメラAPIを紹介します。Firefox OSでは、カメラAPIはカメラアプリで使用されています。
カメラAPIは、OSバージョンがv1.xの場合高い権限が必要としていたので、一般のアプリからは使えません。「Fx0」はOSバージョンがv2.0なので使用できますが、海外で販売されている他の端末では使えない可能性があるので注意が必要です。
カメラAPIを使う場合パーミッションの設定が必要になります。
"permissions": { "camera": { "description": "Required for accessing cameras on the device." } }
カメラAPIの使用は少し煩雑です。navigator.mozCamerasがCameraManagerの配列になっていて、CameraManagerからmozCameraオブジェクトを取得、コンフィグ、セットアップ、mozCameraオブジェクトに対していくつかのイベントハンドラを登録して使うことになります。
var manager = navigator.mozCameras; var opstion = { mode: 'picture', // モード recorderProfile: 'jpg', // 保存形式 previewSize: { width: previewWidth, height: previewHeight }. pictureSize: { width: 1080, // フルHD height: 1920 // フルHD } }; // カメラ使用のリクエスト var promise = manager.getCamera('front', option); promise.then((params) => { // カメラのリクエストが成功した (snip) }, (error) => { // カメラのリクエストが失敗した (snip) });
カメラAPIはメソッドやオブジェクトが多いので使うのも大変ですが、下記の資料を参考に頑張って使ってみてください。
mozCamerasオブジェクトと関連オブジェクト
MDNの資料だけではわからないことわかりにくいことがあるので、Firefox OSに搭載されているカメラアプリの実装も参考にするといいでしょう。
Firefox OSのカメラアプリ
カメラAPIのインターフェイス定義
Bluetooth
Bluetoothはもうお馴染みの近距離無線通信規格ですね。Firefox OSでもA2DP/AVRCP/HFPといったオーディオ系プロファイルやファイル転送をサポートしており、将来的にはHIDやBLEのサポートも予定されています。
現在は内部アプリ向けのAPIとなっており、一般のアプリからは使用できないようになっています。今回は一般向けに使えないのでコード例は示しません。
NFC
NFCはBluetoothよりもさらに短い距離での通信を定義した規格です。交通系ICのように接触に近い形で使うものになります。Firefox OSでは画像や音声、連絡帳データを交換する際に、BluetoothのペアリングをNFCで行うNFC Bluetooth Handoverをサポートしています。Android Beamと互換なのでAndroidともファイルの交換が行えます。
NFCも現在は内部アプリ向けのAPIになっています。一般のアプリからは使用できないのでコード例は示しません。
ストレージ
スマートフォンでは、内部ストレージやSDカードに格納された画像や音声を扱うことがあります。Firefox OSはFileSystem APIをサポートしていません。単にファイルを扱うだけならIndexed DBでよかったり、FileSystem APIが活きるのはブラウザの外との協調にあるというのもあるので優先度が低いのでしょう。Firefox OSでは内部ストレージやSDカードにあるファイルを読み込むのに、getDeviceStorageを使用します。
getDeviceStorageではファイルのカテゴリに応じて記憶媒体名を定義しています。読み込みたいファイルの記憶媒体名を指定してファイルへのアクセスを求めることになります。
- music:ミュージックとサウンド
- pictures:画像
- sdcard:SDカードデバイス
- videos:動画
getDeviceStoregeを使用するにはパーミッションの設定が必要です。これは記憶媒体名ごとに設定する必要があります。
"permissions": { "device-storage:videos":{ "access": "readonly" }, "device-storage:pictures":{ "access": "readwrite" } }
getDeviceStorageは、ファイルへのアクセスを提供するDeviceStorageオブジェクトを返します。DeviceStorageオブジェクトを使うとファイルの追加、削除、Fileオブジェクトの取得が行えます。
var pics = navigator.getDeviceStorage('pictures'); // ファイルを列挙 var cursor = pics.enumerate(); cursor.onsuccess = function () { var file = this.result; (snip) // 最後までイテレーションされていなければ次へ進む if (!this.done) { this.continue(); } }
パーミッションの種類や記憶領域名、メソッド名など、getDeviceStoregeには多くの関連情報があるので、使用の際は以下のURLを参考にしてください。