- Android
- 2014-09-30
この記事は最終更新日から1年以上経過しています。
GoogleMapに限らず、位置情報を利用することは多いと思います。
LocationClientクラスを利用して位置情報を取得することができます。
GooglePlay開発者サービス(GooglePlayServices)を利用しますので、
プロジェクトにライブラリを組み込む必要があります。
導入方法は以下に書いていますのでご覧ください。
[Google Maps Android API v2]
今回、必要なインポートの抜粋。
import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.GooglePlayServicesClient.ConnectionCallbacks; import com.google.android.gms.common.GooglePlayServicesClient.OnConnectionFailedListener; import com.google.android.gms.common.GooglePlayServicesUtil; import com.google.android.gms.location.LocationClient; import com.google.android.gms.location.LocationListener; import com.google.android.gms.location.LocationRequest;
Activityを継承したメインクラスにコールバックのクラスを実装します。
public class MainActivity extends Activity implements ConnectionCallbacks, OnConnectionFailedListener, LocationListener {
LocationRequestの設定をします。
private static final LocationRequest REQUEST = LocationRequest.create() .setInterval(5000) // 5 seconds .setFastestInterval(16) // 16ms = 60fps //.setNumUpdates(3) .setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
setInterval (long millis) | ミリ秒単位で位置情報更新の間隔を設定します。 |
setFastestInterval (long millis) | ミリ秒単位で位置情報更新の正確な間隔を設定します。 |
setNumUpdates (int numUpdates) | 位置情報の更新数を設定します。 |
setPriority (int priority) | 位置情報取得要求の優先順位を設定します。 |
PRIORITY_BALANCED_POWER_ACCURACY | 誤差約100m以内の精度 |
PRIORITY_HIGH_ACCURACY | できる限り正確な位置 |
PRIORITY_LOW_POWER | 誤差約10km以内の精度。電力消費を抑えられる。 |
PRIORITY_NO_POWER | 消費電力なしで可能な限り最高の精度 |
onResumeにてLocationClientのインスタンスを生成し、接続します。
@Override protected void onResume() { super.onResume(); setUpLocationClientIfNeeded(); mLocationClient.connect(); }
onPauseで切断します。
@Override public void onPause() { super.onPause(); if (mLocationClient != null) { mLocationClient.disconnect(); } }
LocationClientのインスタンスを生成するメソッド
private void setUpLocationClientIfNeeded() { if (mLocationClient == null) { mLocationClient = new LocationClient( this, this, // ConnectionCallbacks this); // OnConnectionFailedListener } }
GooglePlayサービスとの接続に失敗した時のイベント
@Override public void onConnectionFailed(ConnectionResult arg0) { Toast.makeText(this, "onConnectionFailed", Toast.LENGTH_SHORT).show(); }
GooglePlayサービスと接続時イベント
@Override public void onConnected(Bundle arg0) { Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show(); mLocationClient.requestLocationUpdates( REQUEST, this); // LocationListener }
GooglePlayサービスとの切断時イベント
@Override public void onDisconnected() { Toast.makeText(this, "onDisconnected", Toast.LENGTH_SHORT).show(); }
位置情報が更新された時のイベント
@Override public void onLocationChanged(Location location) { Toast.makeText(this, "緯度:" + location.getLatitude() + "\r\n" + "経度:" + location.getLongitude(), Toast.LENGTH_LONG).show(); }
ちなみに、LocationClientは既にdeprecatedとなっていますので、
今後は別のクラスで作成するようになってくるでしょう。
10,209 views