Android:如何超时GPS试图找到一个锁?

时间:2012-02-24 21:14:35

标签: android gps locationmanager

以下是我的代码片段:

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。

1 个答案:

答案 0 :(得分:2)

removeUpdates(locationListener)假设以停止闪烁的GPS图标。如果它不这样做,我可以提供的最佳建议是,可能还有其他侦听器实例仍在您的locationManager注册?一个被遗忘的for循环可能附加了其他侦听器实例。作为一个蛮力开发人员,我会多次执行removeUpdates()以查看是否有任何影响。