センサー

Android センサー HAL アイコン

Android センサーは、アプリがモバイル デバイスの基盤となる物理センサーにアクセスできるようにします。このセンサーは、センサーの Hardware Abstraction Layer(HAL)である sensors.h によって定義されるデータ提供型仮想デバイスです。

Android センサーとは

Android センサーとは、一連の物理的なセンサー(加速度計、ジャイロスコープ、磁力計、気圧計、湿度センサー、圧力センサー、光センサー、近接センサー、心拍数センサー)からのデータを提供する仮想デバイスです。

カメラ、指紋認証センサー、マイク、タッチ スクリーンは、データを提供する実機のリストには含まれません。これらのデバイスには独自のレポート メカニズムがあります。分離するかどうかは任意ですが、一般に Android センサーは低帯域幅のデータを提供します。たとえば、加速度計では「100 hz x 3 チャンネル」であるのに対し、カメラは「25 hz x 8 MP x 3 チャンネル」、マイクは「44 kHz x 1 チャンネル」となります。

Android では、各種物理センサーをシステム オン チップ(SoC)に接続する方法は定義されません。

  • 多くの場合、センサーチップはセンサーハブを介して SoC に接続され、これにより省電力でのデータのモニタリングと処理が実現されます。
  • 多くの場合、集積回路間通信(I2C)またはシリアル ペリフェラル インターフェース(SPI)がトランスポート メカニズムとして使用されます。
  • 消費電力を削減するために、一部のアーキテクチャは階層化されており、一部の最小の処理はアプリ固有の集積回路で行われ(ASIC - 加速度計チップでのモーション検出など)、それ以上の処理はマイクロコントローラで行われます(センサーハブでのステップ検出など)。
  • アーキテクチャは、デバイス メーカーの裁量により、精度、電力、価格、パッケージ サイズなどの特性を考慮して選択されます。詳細については、センサー スタックをご覧ください。
  • バッチ処理機能は、電力を最適化するうえで重要な検討項目となります。詳細については、バッチ処理をご覧ください。

Android センサーにはそれぞれの「タイプ」があり、それによってセンサーの動作や提供データがわかります。

  • 公式の Android センサータイプは、sensors.h で SENSOR_TYPE_… という名前で定義されます。
    • ほとんどのセンサーが、公式のセンサータイプに分類されています。
    • これらのタイプは、Android SDK に記載されています。
    • これらのタイプのセンサーの動作は、Android 互換性テストスイート(CTS)によりテストされます。
  • メーカーが新しい種類の Android デバイス センサーを統合する場合、メーカーは、それを示す独自の一時タイプを定義できます。
    • これらのタイプはドキュメントに記載されず、アプリ デベロッパーがそのタイプのセンサーのことを知らないか、ほとんどのデバイスに搭載されていないと考えるため(この特定のメーカーの一部のデバイスにのみ搭載されていると考えるなど)、デベロッパーがそのタイプのセンサーを使用することはほとんどありません。
    • これらは CTS によりテストされません。
    • Android がこの種類のセンサーに公式のセンサータイプを定義した場合、メーカーは独自の一時タイプの使用を中止し、代わりに公式のタイプを使用する必要があります。公式のタイプを使用することで、より多くのアプリ デベロッパーがそのセンサーを使用するようになります。
  • デバイスに搭載されているすべてのセンサーのリストは、HAL 実装によってレポートされます。
    • 同じタイプのセンサーが複数存在する場合があります。たとえば、近接センサーが 2 つ存在する場合や、加速度計が 2 つ存在する場合があります。
    • ほとんどのアプリは、特定のタイプにつきセンサーを 1 つだけリクエストします。たとえば、デフォルトの加速度計をリクエストするアプリは、リスト内の最初の加速度計を取得します。
    • センサーは通常、ウェイクアップ非ウェイクアップのペアで定義されます。両センサーは、同じタイプを共有しますが、ウェイクアップ特性が異なります。

Android センサーは、データを一連のセンサー イベントとして提供します。

イベントには次のものが含まれます。

  • そのイベントを生成したセンサーへのハンドル
  • そのイベントが検出または測定されたタイムスタンプ(SystemClock.elapsedRealtimeNanos() に基づく)
  • その他のデータ

レポートされるデータの解釈は、センサータイプによって異なります。各センサータイプのレポート対象データの詳細については、センサータイプの定義をご覧ください。

既存のドキュメント

デベロッパー向け

メーカー向け

  • 概要
  • Hardware Abstraction Layer(HAL)
  • Android CDD(互換性定義ドキュメント)
    • /compatibility/android-cdd.pdf
    • センサーに関連するセクションをご覧ください。
    • CDD は条件が緩いため、CDD の要件を満たしただけでは高品質なセンサーを実現することはできません。