Android 現在位置を取得する

android-getlocation.png
現在位置を取得するにはGoogle Play Serviceが必要です。
Android SDK Managerを立ち上げて
Android Studioなら画面上部にあるこのボタンsdkmanagerbutton.pngで立ち上がります
Google Play Serviceをインストールしましょう[1]。
install.png
プラス、端末自身にもgoogle 開発者サービスというアプリをインストールする必要が有ります

AndroidManifest.xmlにてpermissionを追加

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.google.android.gms.location.sample.basiclocationsample" >
 
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name=”android.permission.ACCESS_FINE_LOCATION/>
</manifest>

GPSからの位置取得

<uses-permission android:name=”android.permission.ACCESS_FINE_LOCATION”/>

Wifiによる位置取得

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

Android StudioでGoogle Play Serviceのセットアップ

build.gradleに以下を追加

apply plugin: 'com.android.application'
    ...
 
    dependencies {
        compile 'com.google.android.gms:play-services:7.5.0'
    }

自分のActivityのonCreate()から以下の関数を呼びます
protected synchronized void buildGoogleApiClient() {
    mGoogleApiClient = new GoogleApiClient.Builder(this)
        .addConnectionCallbacks(this)
        .addOnConnectionFailedListener(this)
        .addApi(LocationServices.API)
        .build();
}

onConnectedで現在地を取得してからやりたい処理を書きます
public class MainActivity extends ActionBarActivity implements
        ConnectionCallbacks, OnConnectionFailedListener {
    ...
    @Override
    public void onConnected(Bundle connectionHint) {
        mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
                mGoogleApiClient);
        if (mLastLocation != null) {
            mLatitudeText.setText(String.valueOf(mLastLocation.getLatitude()));
            mLongitudeText.setText(String.valueOf(mLastLocation.getLongitude()));
        }
    }
}

onConnected()mGoogleApiClient.connect();が呼ばれたら、呼ばれます。

一定時間ごとに現在位置を取得する方法

LocationRequest mLocationRequest;
@Override
    public void onCreate(Bundle savedInstanceState){
         ....
         buildGoogleApiClient();
         createLocationRequest();
    }
protected void createLocationRequest() {
        mLocationRequest = new LocationRequest();
        mLocationRequest.setInterval(3000);//位置更新を受け取る間隔(msec) 3秒おき
        mLocationRequest.setFastestInterval(1000);//速くて1秒おき
        mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);//正確さ優先
    }

createLocationRequest()の処理をしてからmGoogleApiClient.connect()を呼んで、
onConnectedの中でstartLocationUpdates()を呼ぶと
protected void startLocationUpdates() {
      LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
}

onLocationChanged(Location location)が一定時間ごとに呼ばれるようになります
一回connect()を読んだら、次からはstartLocationUpdates(),stopLocationUpdates()でonLocationChanged(Location location)を一定時間ごとに呼ぶかどうかを切り替えられます
protected void startLocationUpdates() {
        LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
    }
protected void stopLocationUpdates() {
        LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
    }

[2]

location

サポートサイト Wikidot.com location