Android(開発)/GPS

Android(開発)/GPS

【注意】この情報はものすごい古いため参考にならない可能性が高いです。

バージョンと製造年月日

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

が与えられている

GPS_PROVIDER

つまり、3G回線も、無線LANも、GPS電波も無ければGPSは動かないということ

初回問題

getLastKnownLocationはその端末が最後に位置測定した場所が帰る。つまり1度も取得していなければ、nullが返る。

こういう状況はあまりないが、電源を入れた直後にアプリを起動するとnullという可能性が出てくる。この点も注意して実装する必要がある。

GPSの動きを止める

lm.removeUpdates(this); //このthisはrequestLocationUpdatesに使ったものと同一のものを使う。

位置が取得完了イベントで動かす

LocationListeneronLocationChanged メソッドを実装する

public void onLocationChanged(Location location){
    ///このlocationインスタンスに取得された位置が入っている。
}

プロバイダが変化したらイベントを動かす

LocationListeneronStatusChanged メソッドを実装する

public void onStatusChanged(String provider, int status, Bundle extras){
}

これは「地下鉄に入った」とか、「野外に出た」とか環境の変化に対応するために実装する。

Tags

android/dev/gps.txt · 最終更新: 2019-12-02 15:46 by ore