AndroidでGPS（位置情報取得）

**Android（Java）で GPS をテストしてみました。**

## ![yotsuba_s.jpg](https://qiita-image-store.s3.amazonaws.com/0/36751/ba04f0f8-9c02-ffc6-0603-467f65afd633.jpeg) サンプルコード

まず設定ファイルで位置情報取得を許可しておきます。

```xml:AndroidManifest.xml
    <!-- 位置情報 GPSから -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <!-- 位置情報 ネットワークから -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <!-- これは何だろう？？？ -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_UPDATES" />
```

ソースはこんな感じです。

```java:TestActivity.java
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;

public class TestActivity extends Activity {
    // GPS用
    private LocationManager mLocationManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        
        // GPS
        mLocationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        boolean gpsFlg = mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
        Log.d("GPS Enabled", gpsFlg?"OK":"NG");
    }

    // GPSボタン
    public void onBtnGpsClicked(View view) {
        mLocationManager.requestLocationUpdates(
            LocationManager.GPS_PROVIDER, //LocationManager.NETWORK_PROVIDER,
            3000, // 通知のための最小時間間隔（ミリ秒）
            10, // 通知のための最小距離間隔（メートル）
            new LocationListener() {
                @Override
                public void onLocationChanged(Location location) {
                    String msg = "Lat=" + location.getLatitude()
                                    + "\nLng=" + location.getLongitude();
                    Log.d("GPS", msg);
                    mLocationManager.removeUpdates(this);
                }
                @Override
                public void onProviderDisabled(String provider) {
                }
                @Override
                public void onProviderEnabled(String provider) {
                }
                @Override
                public void onStatusChanged(String provider, int status, Bundle extras) {
                }
            }
        );
    }
}
```

## ![yotsuba_s.jpg](https://qiita-image-store.s3.amazonaws.com/0/36751/ba04f0f8-9c02-ffc6-0603-467f65afd633.jpeg) 解説

ひとまず、あちこちのサイトを参考に、シンプルなソースにまとめてみました。

位置情報の取得開始は、 `LocationManager.requestLocationUpdates(〜)`
位置情報の取得終了は、 `LocationManager.removeUpdates(LocationListener)`
です。

位置情報の取得には、GPSだけではなくネットワーク（WiFi、3G）も活用されます。その点はiOSと同じですが、iOSの場合はOS側が使える情報を自動的に判断して位置を確定するのに対し、Androidでは、GPS取得かネットワーク取得かをプログラマーが区別して使う仕様のようです。

また色々わかり次第、追記していきます。

## ![yotsuba_s.jpg](https://qiita-image-store.s3.amazonaws.com/0/36751/ba04f0f8-9c02-ffc6-0603-467f65afd633.jpeg) 参考URL

位置情報を取得するには/GPSを使用するには｜逆引きAndroid入門
http://www.adakoda.com/android/000125.html

AndroidでGPSセンサを利用する方法｜TechBooster
http://techbooster.org/android/device/227/

Androidの位置情報取得 - 1 (現在地取得)
http://koringo2.blogspot.jp/2013/05/locationmanager-mlocationmanager.html

【Android】位置情報取得に関するまとめ
http://blog.shonanshachu.com/2012/06/android.html

AndroidのGPS精度を劇的に改善するたった1つの設定項目
http://mobilelaby.com/blog-entry-3581.html

(･o･ゞ いじょー。