0

基本的に、信号が見つからないときにGPSがスキャンするのを止めようとしています。これにはいくつかのSOがありますが、特にやりたいことではありません。

私はサービスで次のように設定しています。

private void grabsensor() {
    this.locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    locationManager.removeUpdates(this);
    List<String> enabledProviders = this.locationManager.getProviders(true);

    for (String provider:enabledProviders){
        this.locationManager.requestLocationUpdates(provider, 5000, 0, this);
    }
}

30 メートル未満の精度でネットワークを読み取ったときに GPS をスキャンしないように APP を考案しようとしています。バッテリーを節約します。

だから私は次のことをしようとしました:

    // Smart location handling algorithm
    if ((int) location.getAccuracy() < 30) {
        this.locationManager.removeUpdates(this);
    }

これによりすべてのプロバイダーが削除されることを除いて、GPS プロバイダーを削除したいだけで、次に呼び出されたときに同じ if ステートメントが false の場合は GPS プロバイダーが追加されます。

4

1 に答える 1

0

プロバイダーの種類ごとにリスナーの新しいインスタンスを作成できます。ドキュメントによると、リスナーが登録されていることを確認する方法はありません。

class MyLocationListener implements LocationListener {
    //..
}

private LocationListener locationListenerGPS = new MyLocationListener();

private LocationListener locationListenerOther = new MyLocationListener();

private void grabsensor() {
    this.locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    locationManager.removeUpdates(this);
    List<String> enabledProviders = this.locationManager.getProviders(true);

    for (String provider:enabledProviders) {
        if (provider == LocationManager.GPS_PROVIDER)
            this.locationManager.requestLocationUpdates(provider, 5000, 0, locationListenerGPS);
        else
            this.locationManager.requestLocationUpdates(provider, 5000, 0, locationListenerOther);
    }
}

private void removeGPSListener() {
    if ((int) location.getAccuracy() < 30) {
        this.locationManager.removeUpdates(locationListenerGPS);
    }
}
于 2013-01-28T00:31:04.190 に答える