2

2 つのロケーション プロバイダーをリッスンしています

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 500, 5,this); locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 500, 5, これ);

どういうわけか1人のリスナーを削除することは可能ですか? たとえば、あるタスクで GPS 更新を使用したいだけで、このタスクを実行している間は NETWORK_PROVIDER を無効にしたいと考えています。それは何とか可能ですか?私はこのようにしようとしました:

locationManager.removeUpdates(これ); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 500, 5,this);

しかし、これは本当に良いことではありません。なぜなら、GPS が修正した場合、この方法ではそれが削除され、GPS が再び衛星の検索を開始するからです。

4

1 に答える 1

3

次の 2 つの異なる を作成できますLocationListener

private LocationListener gpsListener = new LocationListener() {

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onLocationChanged(Location location) {
        if(location != null){
            // do your work for gps location
        }
    }
};
private LocationListener networkListener = .... // same init as gpsListener

そして次のように使用します:

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 500, 5, gpsListener); 
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 500, 5, networkListener);

その後、GPS フィックスを失うことなく、現在のアプローチを使用できます。それ以外の:

locationManager.removeUpdates(this); 
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 500, 5,this);

以下を使用します。

locationManager.removeUpdates(networkListener); 
于 2013-10-18T08:11:55.277 に答える