[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>
を書いておかないとエラーになります。