[Firefox OS][WebAPI]環境光センサの使い方


 藪下@ワールドカップでだれてからblog停滞中です。

 個人的な活動でいくつかのAPIを使ってみる機会があったのでしばらくAPIを使ってみたシリーズやります。
 中身を読むのが本来の藪下の興味なので、一通り使い方の記事を書いたら気になるAPIは中身も読んでいきます。

 今回は環境光センサを使ってみます。

環境光センサ

 環境光センサはデバイス周辺の照度を検出するセンサです。
 携帯電話では環境の明るさに応じて液晶パネルの明るさを変えて見やすく省電力にする用途に使われます。
 環境光センサAPIはその名の通り環境光センサの値を取得します。
 環境光センサの値を取得するにはdevicelightイベントにハンドラを登録します。

イベントの登録

 環境光センサAPIはwindowオブジェクトに属します。なので

  • イベントハンドラをaddEventListenerで登録する場合
    • window.addEventListener
    • イベント名:devicelight
  • ondevicelightに代入して登録する場合
    • window.ondevicelightを使用します。

 addEventListenerでのイベント登録は次の通りです。

  window.addEventListener('devicelight', handler);

 ondevicelightのイベント登録は次の通りです。

  window.ondevicelight = handler;

イベントハンドラの書式

 環境光センサAPIはセンサで検出したルクス単位の明るさをunrestrected doubleで返します。
 環境光センサの値はevent.valueで取得できます。

  function handler(event) {
    var light = event.value; // ambient light sensor value
    @<i>{(snip)}
  }

サンプル

  • [https://github.com/aoitan/C86_samples/tree/master/devicelight](https://github.com/aoitan/C86_samples/tree/master/devicelight 環境光センサのサンプル}
window.addEventListener('devicelight', function(event) {
  console.log('環境光センサの値は' + event.value + 'です');
  var brightness = '';
  var l10n = navigator.mozL10n;
  if (event.value > 35000) {
    brightness = l10n.get('SHINE');
  } else if (event.value > 10000) {
    brightness = l10n.get('CLOUDY');
  } else if (event.value > 1000) {
  } else if (event.value > 200) {
    brightness = l10n.get('ROOM');
  } else if (event.value > 100) {
    brightness = l10n.get('NIGHT');
  } else if (event.value > 10) {
    brightness = l10n.get('CANDLE');
  } else {
    brightness = l10n.get('MOONLIGHT');
  }
  var light_value = document.getElementById('light_value');
  light_value.innerHTML = event.value + '(' + brightness + ')';
});

 上記コードでは環境光センサの値に応じてどのぐらい明るいかの文字列を表示しています。
 明るさを表す文字列はl10n.getでロケールに合わせた文字列を取得しています。
 l10n.get('SHINE')の場合英語 (アメリカ) ロケールだと ‘shine’ が、日本語ロケールだと ‘晴天’ が表示される要領です。

まとめ

 環境光センサAPIはFxOSのセンサAPIに多く見られるイベントリスナを登録してデバイスイベントを待つスタイルのAPIでした。
 このAPIの使いどころはやっぱり輝度調整とかになるのかなと思うのですが、ディスプレイの制御がcertifiedなのでそこはいまいち面白味ないです。
 環境光センサAPIである程度物体の近さを計算する補助になるので、やりようによっては物体からの相対位置を計算することができるかもしれません。
 たとえば顔を近づけると目をつぶったりほほを赤らめてくれるようなキス顔アプリとかも頑張れば作れるかもしれませんね。面白いことを思いついたらぜひ作った教えてくださいね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <img localsrc="" alt="">