基本上我试图阻止GPS在无法找到信号的情况下进行扫描,但是有一些问题,但不是特别针对我想做的事情。
我在服务中设置了以下内容。
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);
}
}
我正在尝试设计我的APP,以便当它读取精度小于30米的网络时,它不会扫描GPS,因为在我的用例中,用户位于建筑物内部,这是我节省电池的方式。
所以我尝试做以下事情:
// Smart location handling algorithm
if ((int) location.getAccuracy() < 30) {
this.locationManager.removeUpdates(this);
}
除非这将删除所有提供商,我只想删除GPS,然后在下次调用它时将检查相同的if语句,如果它是假的,它将添加GPS提供商。
答案 0 :(得分: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);
}
}