位置情報を取得するにはLocationManagerが提供されていますが、GPSとWiFiの設定に依存してLocationProviderの切り替えが必要でした。Google Play services APKが提供するLocation Serviceを使用すれば、Providerを考慮することなく位置情報を取得することができます。
Permissionの設定
Location Serviceを使用すには、AndroidManifest.xmlにPermissionの記載が必要です。LocationManagerと同様に、位置情報の精度に応じてPermissionが異なります。
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
LocationClientの接続
Location Serviceを使用するには、LocationClientクラスの生成が必要です。
mLocationClient = new LocationClient(this, mConnectionCallbacks,
mOnConnectionFailedListener);
第2引数にConnectionCallbacksインターフェイス、第3引数にOnConnectionFailedListenerインターフェイスをセットします。ConnectionCallbacksインターフェイスは、LocationClientがLocation Serviceに接続 / 切断した際にコールされます。OnConnectionFailedListenerは何らかのエラーが発生した場合にコールされます。
LocationClientの接続要求はLocationClient#connectメソッドをコールします。
@Override
protected void onStart() {
super.onStart();
if (isGooglePlayServicesAvailable()) {
if (!mLocationClient.isConnected()) {
mLocationClient.connect();
}
}
}
接続に成功すると、mConnectionCallbacks#onConnectedがコールされます。
LocationRequestの生成
LocationClientの接続が成功した後に、requestLocationUpdatesメソッドをコールし位置情報の取得要求を行います。
@Override
public void onConnected(Bundle bundle) {
mLocationClient.requestLocationUpdates(mLocationRequest, mLocationListener);
}
第1引数にLocationRequestクラスを、第2引数にLocationListenerインターフェイスをセットします。LocationRequestクラスは次のようなセットモジュールを提供します。
| メソッド | 内容 |
|---|---|
| setInterval | 位置情報の更新間隔をmsで指定 |
| setPriority | プライオリティ(精度)の指定 |
| setExpirationDuration | 要求の期間(動作時間を)msで指定 |
| setFastestInterval | 位置情報の最速更新間隔をmsで指定 |
| setSmallestDisplacement | 最小移動距離をmで指定(指定メートル移動したら更新) |
位置情報の取得
位置情報はmLocationListener#onLocationChangedメソッドにてAndroid OSから受け取ります。位置情報はLocationクラスとして取得します。
private LocationListener mLocationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
}
};
LocationClientの停止
位置情報の更新を停止するには、LocationClientクラスのremoveLocationUpdatesメソッドをコールしリスナーを解除します。続けて、disconnectメソッドをコールしLocation Serviceから切断します。
@Override
protected void onStop() {
if (isGooglePlayServicesAvailable()) {
if (mLocationClient.isConnected()) {
mLocationClient.removeLocationUpdates(mLocationListener);
}
mLocationClient.disconnect();
}
super.onStop();
}
0 件のコメント:
コメントを投稿