monthly gimite

試験運用中。

[android] AndroidでGPSの情報を定期的に取る

LocationManager.getLastKnownLocation()というのがあったので、これを定期的に呼べばいいのかと思ったのですが、これだとちっとも座標が変わりません。どうも、これは最後に(何かのアプリケーションが?)位置情報を要求したときの座標が返ってくるだけで、自動でアップデートはされないようです。常に最新の位置情報を受け取るには、Location.requestLocationUpdates()を使うようです。

public class MainActivity extends Activity {

    private LocationManager locationManager;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        locationManager = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
        locationManager.requestLocationUpdates("gps", 2000, 0, onLocationUpdate);
    }

    private LocationListener onLocationUpdate = new LocationListener() {
        public void onLocationChanged(Location location) {
            // GPSで位置情報が取れているときは、これが2000ミリ秒おきぐらいに呼ばれる。
            // location.getLatitude(), location.getLongitude()に現在地の緯度経度が。
        }
        public void onProviderDisabled(String provider) {
        }
        public void onProviderEnabled(String provider) {
        }
        public void onStatusChanged(String provider, int status, Bundle extras) {
        }
    };

}

ちなみにAndroidManufest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <!-- 略 -->
    </application>
    <!-- ↓これ -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION">
    </uses-permission>
</manifest>

を書いておかないとエラーになります。