位置情報を取得するには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 件のコメント:
コメントを投稿