【注意】この情報はものすごい古いため参考にならない可能性が高いです。
Android SDK 1.6
基本これで取れる。
LocationManager lm = (LocationManager)getSystemService(LOCATION_SERVICE); String p = lm.getBestProvider(new Criteria(), true); //10秒置きにイベント更新する。 lm.requestLocationUpdates(p, 10000, 0, this); //このthisはLocationListenerを実装しているインスタンス。つまり位置関係のイベントを処理するインスタンスになる。 Location location = lm.getLastKnownLocation(p);
10秒おきに取得して、位置間隔ゼロなので、その地点でスポットでほしい場合はゼロを使う。
Androidは位置特定の手段として2系統持っていて、通信ネットワークの情報を使ったザックリ位置と、GPSの電波を使った正確バージョンと2つある。たぶんmanifestの
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
に対応しているのだと思われる。
ネットワーク版は位置特定が早くてレスポンスがいいが、かなりザックリで100mぐらいは平気でずれる。GPSのバージョンは15mほどの誤差で正確に特定するが、いかんせん特定までに非常に時間がかかるのでさくさく動かすアプリには向かないし、ものの影に入るとすぐに使えなくなって安定度も低い。
Providerの名前として
LocationManager.GPS_PROVIDER
と
LocationManager.NETWORK_PROVIDER
が与えられている
つまり、3G回線も、無線LANも、GPS電波も無ければGPSは動かないということ
getLastKnownLocationはその端末が最後に位置測定した場所が帰る。つまり1度も取得していなければ、nullが返る。
こういう状況はあまりないが、電源を入れた直後にアプリを起動するとnullという可能性が出てくる。この点も注意して実装する必要がある。
lm.removeUpdates(this); //このthisはrequestLocationUpdatesに使ったものと同一のものを使う。
LocationListener
の onLocationChanged
メソッドを実装する
public void onLocationChanged(Location location){ ///このlocationインスタンスに取得された位置が入っている。 }
LocationListener
の onStatusChanged
メソッドを実装する
public void onStatusChanged(String provider, int status, Bundle extras){ }
これは「地下鉄に入った」とか、「野外に出た」とか環境の変化に対応するために実装する。