2010-06 << 2010-07 >> 2010-08

2010-07-21 (水)

*[Android] GPSで位置情報取得

GPSで位置情報を取得するのも簡単です.LocationManagerを取得して,LocationListenerを登録.

    protected void onResume() {
        LocationManager locationManager = (LocationManager)getSystemService(LOCATION_SERVICE);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, this);
    }

センサーはregisterListenerでしたが,こちらはrequestLocationUpdatesです.上の例では1000ms間隔,もしくは1m以上移動すると通知してくれるように設定.ちなみに解除はremoveUpdatesです.統一しておいて欲しいけどこれくらいは我慢.

    public void onLocationChanged(Location location) {
        double lat = location.getLatitude();
        double lon = location.getLongitude();
        
        Toast.makeText(this, "la "+lat+"lo "+lon, Toast.LENGTH_LONG).show();
    }

位置が更新されると,onLocationChangedにLocation が渡されるのであとは自由に.

    protected void onPause()
    {
        super.onPause();
        LocationManager locationManager = (LocationManager)getSystemService(LOCATION_SERVICE);
        locationManager.removeUpdates(this);
    }

リスナーを登録したままだと,アプリケーションの画面を閉じてもGPSがONになったままなので,onStoponPause時に解除したほうが良いです.となると,必然的にonResumeで登録するのが良さそう.

GPS_PROVIDER以外にも,NETWORK_PROVIDERで基地局の位置が取れるので,GPSが使えない室内などでも大体の位置が分かります.

有効数字6桁以上の数値が外部から入力されることって他だとなかなかないですね.

Toastたくさん出しすぎるとなかなか消えないことに今気づいた.

2010-06 << 2010-07 >> 2010-08