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メソッドを呼び出すことで通知要求を止めることが出来る。