Android
AndroidSDK
android開発

Androidアプリケーション技術者認定試験ベーシックの試験範囲の知識をまとめた(9)

GPSとセンサ

GPS

LocationManagerを取得する

android.locationパッケージのLocationManagerクラスで位置情報を取得できる。
ContextクラスのgetSystemServiceメソッドで取得できる。

LocationListenerを実装する

位置情報を取得するにはLocationListenrインターフェースを実装する。
LocationManagerクラスのインスタンスに対して、位置情報の通知を要求する。

onLocationChanged 位置情報が変更された場合に呼び出される
onProviderDisabled 位置情報プロバイダが無効になった場合呼び出される
onProviderEnabled 位置情報プロバイダが有効になった場合に呼び出される
onStatusChanged 位置情報プロバイダのステータスが変更された場合に呼び出される

位置情報を要求する

位置情報の更新を受け取るためには、LocationManagerクラスで用意されているrequestLocationUpdatesを呼び出す。
第一引数にはプロバイダ(GPSの場合はLocationManager.GPS_PROVIDERを指定、ネットワークの場合はLocationManager.NETWORK_PROVIDERを指定)、第二引数は取得する間隔(ミリ秒)、第三引数は通知される最小距離を指定(メートル)、第四引数にLocationListenerインターフェースを実装したクラスを指定。

位置情報の通知の停止には、removeUpdateメソッドを呼び出すことで止めることが出来る。

位置情報を取得する

位置情報に変化があった場合、実装したリスナーの各メソッドが呼び出される(onLocationChanged)。
その引数として、Locationクラスのインスタンスが渡される。そのgetterメソッドを使って位置情報が取得できる。

getLatitude() 緯度を取得
getLongtiude() 経度を取得
getAccuracy() 精度を取得
getAltitude() 高度を取得
getTime() 時刻を取得
getSpeed() 速度を取得
getBearing() 方向を取得

GPSの利用許可

マニフェストファイルにandroid.permission.ACCESS_COARSE_LOCATIONを指定する。
GPSを利用して精密に取得する場合は、android.permission.ACCESS_FINE_LOCATIONを指定する。
エミュレータを利用する場合はandroid.permission.ACCESS_MOCK_LOCATIONを指定する。

バッテリー消費にご用心!

GPSはバッテリー消費が早いので注意。常時取得するのではなく適切な間隔をあけるようにする。

センサ

SensorManagerを取得する

android.hardwareパッケージのSensorManagerクラスで端末に搭載している各種センサの情報を取得できる
Contextクラスの派生クラスのgetSystemServiceメソッドを呼び出すことで、SensorManagerのインスタンスが得られる

使用可能なセンサ

android.hardware.Sensorクラスで定数として定義されている

TYPE_ACCELEROMETER 加速度センサ
TYPE_ALL 使用できるすべてのセンサ
TYPE_AMBIENT_TEMPERATURE 温度センサ(APIレベル14以降)
TYPE_GRAVITY 重力センサ(APIレベル9以降)
TYPE_GYROSCOPE ジャイロセンサ
TYPE_LIGHT 明るさセンサ
TYPE_LINEAR_ACCELERATION 線形加速度センサ(APIレベル9以降)
TYPE_MAGNETIC_FIELD 地磁気センサ
TYPE_ORIENTATION 傾きセンサ
TYPE_PRESSURE 圧力センサ
TYPE_PROXIMITY 近傍センサ
TYPE_RELATIVE_HUMIDITY 湿度センサ(APIレベル14以降)
TYPE_ROTATION_VECTOR 回転ベクトルセンサ(APIレベル9以降)
TYPE_TEMPERATURE 温度センサ(APIレベル14以降廃止)

Sensorクラスのインスタンスを取得する

センサから情報を取得するには、使用したいセンサに相当するSensorクラスのインスタンスを取得する。
SensorManagerクラスのgetSensorListメソッドに取得したいセンサーの定数を渡して呼び出すことで取得できる。

センサの値を取得

SensorEventListenerというイベントリスナーのインターフェースを実装して、SensorManagerクラスのインスタンスに対してセンサ情報の変化の通知を要求する。

onSensorChanged センサ情報に変化があった場合に呼び出される
onAccuracyChanged センサの精度に変化があった場合に呼び出される

センサ情報に変化があった場合の通知を受け取るためにはSensorManagerクラスのregisterListenerメソッドを呼び出し。SensorEventListenerを登録する
第一引数はSensorListenerインターフェースを実装したインスタンス。第二引数はSensorのインスタンス。
第三引数は取得精度を指定する。

SENSOR_DELAY_FASTEST 可能な限り早くセンサデータを取得
SENSOR_DELAY_GAME ゲームに適した速度
SENSOR_DELAY_NORMAL 通常。画面の向きの変化に適した速度
SENSOR_DELAY_UI ユーザインターフェースに適した速度

センサの通知が不要になった場合はunregisterListenerメソッドを呼び出すことで通知要求を止めることが出来る。