位置情報を取得するにはLocationManagerが提供されていますが、GPSとWiFiの設定に依存してLocationProviderの切り替えが必要でした。Google Play services APKが提供するLocation Serviceを使用すれば、Providerを考慮することなく位置情報を取得することができます。
Permissionの設定
Location Serviceを使用すには、AndroidManifest.xmlにPermissionの記載が必要です。LocationManagerと同様に、位置情報の精度に応じてPermissionが異なります。
1 | <uses-permission android:name= "android.permission.ACCESS_FINE_LOCATION" /> |
1 | <uses-permission android:name= "android.permission.ACCESS_COARSE_LOCATION" /> |
LocationClientの接続
Location Serviceを使用するには、LocationClientクラスの生成が必要です。
1 2 | mLocationClient = new LocationClient( this , mConnectionCallbacks, mOnConnectionFailedListener); |
第2引数にConnectionCallbacksインターフェイス、第3引数にOnConnectionFailedListenerインターフェイスをセットします。ConnectionCallbacksインターフェイスは、LocationClientがLocation Serviceに接続 / 切断した際にコールされます。OnConnectionFailedListenerは何らかのエラーが発生した場合にコールされます。
LocationClientの接続要求はLocationClient#connectメソッドをコールします。
1 2 3 4 5 6 7 8 9 | @Override protected void onStart() { super .onStart(); if (isGooglePlayServicesAvailable()) { if (!mLocationClient.isConnected()) { mLocationClient.connect(); } } } |
接続に成功すると、mConnectionCallbacks#onConnectedがコールされます。
LocationRequestの生成
LocationClientの接続が成功した後に、requestLocationUpdatesメソッドをコールし位置情報の取得要求を行います。
1 2 3 4 | @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クラスとして取得します。
1 2 3 4 5 6 7 | private LocationListener mLocationListener = new LocationListener() { @Override public void onLocationChanged(Location location) { } }; |
LocationClientの停止
位置情報の更新を停止するには、LocationClientクラスのremoveLocationUpdatesメソッドをコールしリスナーを解除します。続けて、disconnectメソッドをコールしLocation Serviceから切断します。
1 2 3 4 5 6 7 8 9 10 | @Override protected void onStop() { if (isGooglePlayServicesAvailable()) { if (mLocationClient.isConnected()) { mLocationClient.removeLocationUpdates(mLocationListener); } mLocationClient.disconnect(); } super .onStop(); } |