2011年12月3日

【Android】GPSを使用し、現在位置を取得する(2)

前回はアプリにGPSの使用許可を与えるところまで説明いたしました。

今回はGPSで現在位置の取得へ移りたいと思います。


では、ここからはActivityとlayoutの記述になりますが、
私はMapViewを使用する以外の位置取得方法が分からないので、
MapViewを使用する前提でお話します。
MapViewを使用せずに取得する方法がありましたら教えて下さい。

まずLayoutにMapViewを準備します。

main_layout.xml

<com.google.android.maps.MapView
  android:id="@+id/map_view"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:apiKey="@string/map_key_android"
/>
これでMapを表示する場所の準備は出来ました。

次に、Activityの記述へ移ります。
まず、onCreateメソッドへ、下記を追記します。

MainActivity.java

public class MainActivity extends MapActivity {
  // …
  private static final int INITIAL_ZOOM_LEVEL = 16;

  public void onCreate(Bundle savedInstanceState) {
    // ...
    mv = (MapView) findViewById(R.id.map_view);
    overlay = new MyLocationOverlay(getApplicationContext(), mv);

    overlay.onProviderEnabled(LocationManager.GPS_PROVIDER);
    overlay.enableMyLocation();
    GeoPoint myLocation = overlay.getMyLocation();
    if(myLocation == null){
      myLocation = new GeoPoint(
        new Double(35.68198003744061 * 1E6).intValue(),
        new Double(139.76609230041504 * 1E6).intValue()
      );
    }
    mv.getController().animateTo(myLocation);
    mv.getController().setZoom(INITIAL_ZOOM_LEVE);
    overlay.runOnFirstFix(new Runnable() {
      public void run() {
        // follow user's current location
        myLocation = overlay.getMyLocation();
        mv.getController().animateTo(myLocation);
        mv.getController().setZoom(INITIAL_ZOOM_LEVE);
      }
    });
    mv.getOverlays().add(overlay);
    mv.invalidate();
  }
}

これでMapが表示されると思います。

overlay.runOnFirstFix(new Runnable());でGPSからの位置取得をいたします。

myLocation = overlay.getMyLocation();
現在位置が取得できます。

今回はここまでにします。

分かりにくくてすいません。

GPSを使用したAndroidアプリOneClickHomeをよろしくお願いします。