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,因为在我的用例中,用户在建筑物内,这是我的方式节省电池。

所以我尝试执行以下操作:

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

除了这将删除所有提供者之外,我只想删除 GPS 提供者,然后下次调用它时,它将检查相同的 if 语句,如果它是错误的,它将添加 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 回答