SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Firefox OS搭載スマホ「Fx0」でつくろう! はじめてのFirefox OSアプリ開発(AD)

Firefox OSアプリ開発が楽しくなるハードウェアAPIの概要と、センサーAPIや音声APIを使った楽器アプリの作例

Firefox OS搭載スマホ「Fx0」でつくろう! はじめてのFirefox OSアプリ開発 第3回

W3C非標準のAPI

カメラAPI

 カメラAPIは、その名の通りカメラを制御するAPIです。Firefox OSでカメラを制御する方法は、inputタグ、カメラAPI、getUserMediaの3つがありますが、ここではカメラAPIを紹介します。Firefox OSでは、カメラAPIはカメラアプリで使用されています。

 カメラAPIは、OSバージョンがv1.xの場合高い権限が必要としていたので、一般のアプリからは使えません。「Fx0」はOSバージョンがv2.0なので使用できますが、海外で販売されている他の端末では使えない可能性があるので注意が必要です。

 カメラAPIを使う場合パーミッションの設定が必要になります。

manifest.webapp
"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を使用するにはパーミッションの設定が必要です。これは記憶媒体名ごとに設定する必要があります。

manifest.webapp
"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を参考にしてください。

次のページ
環境光センサーと近接センサーとWebAudioで楽器アプリを作る(1)

この記事は参考になりましたか?

Firefox OS搭載スマホ「Fx0」でつくろう! はじめてのFirefox OSアプリ開発連載記事一覧

もっと読む

この記事の著者

藪下 正美(ヤブシタ マサミ)

 株式会社グローバルサイバーグループ マネージャ。 大阪のソフトウェア開発会社で主に携帯電話・スマートフォンのドライバからアプリまで幅広く開発に従事。 関東支社に転属後はスマートフォン・タブレット向けのアプリ開発を主に担当。 2012年終わりごろからFirefox OSに注目しコミュニティ活動に精力的に参加している。 会社ブログ 個人ブログ  FxOSコードリーディング主催 サイト Facebookグループ

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/8540 2015/03/26 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング