以下是我的代码片段:
private class NoGpsLock implements Runnable {
public void run() {
if (gps == null) {
Toast toast = Toast.makeText(getApplicationContext(), "Unable to find GPS lock", Toast.LENGTH_LONG);
toast.show();
if (locManager != null) {
locManager.removeUpdates(locListener);
}
}
}
}
由
调用try {
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME, MIN_DIST, locListener);
} catch (Exception ex) {
}
Handler gpsHandler = new Handler();
gpsHandler.postDelayed(new NoGpsLock(), 15000); //15seconds
根据我的理解,removeUpdates()
应该停止GPS接收更新。我在模拟器和2个设备上试过这个;在模拟器上,它确实阻止应用程序接收进一步的位置更改。但是,在实际设备上,“从GPS接收位置数据”图标不断显示并耗尽电池(我假设该应用程序/手机一直在寻找位置而无法使用,因为我在室内) 。如何阻止GPS尝试查找位置?
编辑:我希望我的应用程序在一段时间后停止尝试查找位置,然后可能稍后重新启动GPS。
答案 0 :(得分:2)
removeUpdates(locationListener)假设以停止闪烁的GPS图标。如果它不这样做,我可以提供的最佳建议是,可能还有其他侦听器实例仍在您的locationManager注册?一个被遗忘的for循环可能附加了其他侦听器实例。作为一个蛮力开发人员,我会多次执行removeUpdates()以查看是否有任何影响。