Tips

Android センサー・フレームワーク 【Android TIPS】

11
センサー・フレームワーク
センサー・フレームワーク
このCHAPTERでは、Android端末に搭載されている各種センサーから値を取得するための方法を紹介します。センサー・フレームワークと呼ばれるAPIを使用することで安易に各種センサーを利用したアプリケーションを作成することができます。
センサー概要
一般にセンサーとは温度や明るさ、加速度などといった物理的現象を探知し、電気信号に変換するための機器のことを指します。
Androidには端末に搭載された各種のセンサー機能を利用するためのAPIが提供されています。
このAPIを利用することで、安易にセンサーから値を取得することができる仕組みとなっているのです。

Androidでサポートしているセンサー類は3種に分類することができます。

● モーションセンサー

このセンサーは加速力や回転力などの3次元ベクトルの値を測定することができ、APIを使用することでその3次元ベクトルを3軸(x, y, z)の要素に分割した値で取得することができます。
加速度センサー、重力センサー、ジャイロスコープなどがモーションセンサーに該当します。

● 環境センサー

このセンサーは、周囲の温度や気圧、明るさ、温度などのといった様々な環境パラメータを測定することができます。
気圧センサー、照度センサー、温度センサーなどが環境センサーに該当します。

● 位置センサー

このセンサーはデバイスの物理的な位置を測定することができ、モーションセンサーと同じく3次元ベクトルの値となります。APIを使用することで3軸(x, y, z)の要素に分割した値を取得することができる点も同様です。
傾きセンサー、地磁気センサーなどが位置センサーに該当します。



これらのセンサーを利用するアプリケーションを作成するためには、Androidのセンサー・フレームワークを使用する必要があります。
センサー・フレームワークには便利なクラス・インターフェース群が定義されています。

※注意※
エミュレーターはセンサー機能に対応していないため、このCHAPTERのサンプルプログラムは実機で実行してください。
また、機種ごとに実装が(APIから取得できる値が)異なり、かつ搭載されているセンサーも機種ごとに異なるため、注意する必要があります。


まず、センサー・フレームワークの中に定義されているクラス・インタフェースを紹介します。
これらのクラス・インタフェースはandroid.hardwareパッケージに属しています。

クラス/インターフェース名 概要
Sensor 各種センサー機器に共通する属性(名前、センサー種類、開発ベンダー、バージョン番号等)を管理するセンサー自身を表したクラス。
SensorManager センサーにアクセスするためのクラス。このクラスのオブジェクトを用いてイベントリスナーの登録/削除、センサー情報の取得等を行う。
SensorEvent センサーで発生した情報をまとめたクラス。
SensorEventListener センサー関連のイベントを取得するためのイベントリスナー。SensorManagerクラスで登録/削除を行う。

Senserクラスは、センサー自身を表したクラスです。例えば3つのセンサーを搭載しているAndroid端末では、このクラスから作成したオブジェクトが3つ存在するイメージです。

SenserManagerクラスは、Senserオブジェクトを取得したり、そのオブジェクトに対してイベントリスナーを登録する際に使用します。

SenserEventクラスは、センサーで発生した情報をまとめたクラスです。センサーの種類によって取得できる値が違う(あるセンサーでは3次元ベクトルの値を、またあるセンサーでは1つの値(温度など)を取得する)ため、それらの違いを吸収したり、発生した時間や値の精度を保持するためのクラスです。

SenserEventListenerインタフェースは、センサー関連のイベントをハンドリングし、センサーが測定した値を取得するためのコールバックメソッドを定義しています。SenserManagerクラスをメソッドを使用し、リスナーとしての登録することができます。。


では実際にセンサーから値を取得するための手順に沿って、センサー・フレームワークの使用方法を紹介します。

1. getSystemService()メソッドを使用し、 SensorManagerオブジェクトを取得する

2. SensorManagerオブジェクトから使用したいSensorオブジェクトを取得する

3. SensorEventListenerインターフェースを実装したクラスを作成・インスタンス化し、イベントリスナーとして登録する

4. センサーでイベントが発生すると、イベントリスナーとして登録したSensorEventListenerのコールバックメソッドが実行され、センサーで取得した値がSenserEventオブジェクトとして引数として渡される

5. 不要となったリスナーは解除する

SensorManagerオブジェクトの取得
まずは、SensorManagerオブジェクトを取得する必要があります。

private SensorManager sensorManager;
// ...省略...
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

getSystemService()メソッドはContextクラスで定義されているメソッドです。ActivityクラスやServiceクラスでは上記のように使用することができます。
引数にはStringを渡しますが、一般にはContextクラスに定義されている定数を使います。SENSOR_SERVICEを引数に渡すことでSensorManagerオブジェクトを取得することができます。
戻り値はObjectクラスのため、キャストする必要があります。

Androidアプリ開発の必須知識!JAVAプログラミングを学べる連載リンク

はじめてのJAVA 連載

Recent News

Recent Tips

Tag Search