Categories
SugiBlog ホームページ制作・システム開発

現在地を取得する LocationClient

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);
LocationRequestのパラメータ設定
setInterval (long millis) ミリ秒単位で位置情報更新の間隔を設定します。
setFastestInterval (long millis) ミリ秒単位で位置情報更新の正確な間隔を設定します。
setNumUpdates (int numUpdates) 位置情報の更新数を設定します。
setPriority (int priority) 位置情報取得要求の優先順位を設定します。

LocationRequest.setPriorityの設定値
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となっていますので、
今後は別のクラスで作成するようになってくるでしょう。

参考URL:
LocationClient | Android Developers

5,136 views

コメントは受け付けていません。