我正在开发一个使用gps的应用程序,直到app投入使用。我的GPS在5分钟后醒来并获得位置然后它的符号停止闪烁并且在几乎所有设备(Sony xperia,Samsung tab,Htc WildFire,Motorola photon)中变得不可见,但在Motorola Defy和Samsung Ace中消失,这消耗了巨大的电池电量。 GPS得到一个修复,并在整个时间内变得稳定和可见。这些设备的GPS工作方式(Moto Defy和Samsung Ace)是不同的。看看我的代码:
long _listenerWakeUpTimeInterval=1000*60*5;** //5 minutes
_locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, _listenerWakeUpTimeInterval, 300, locationListener);
所有设备的GPS在5分钟后唤醒,但这两个设备的GPS(Moto Defy和Samsung Ace)每隔300米调用onLocationChanged(Location loc)
方法。时间不适用于这两种设备。当我快速行驶(在汽车中)时,这个距离会在几分钟(1或2分钟)内被覆盖。所以我接到了onLocationChanged(Location loc)
方法的电话。在这些设备中,GPS始终是固定的,静态的和可见的。每次GPS修复时我都不想调用locationManager.removesupdates
方法。我只在onDestroy()
服务中使用此方法。那么请说明为什么这两个设备的GPS与其他设备的行为不同,以及如何解决这个问题?
答案 0 :(得分:2)
如果您阅读the docs,则会说:
minTime:通知的最短时间间隔,以毫秒为单位。此字段仅用作节省电量的提示,位置更新之间的实际时间可能大于或小于此值。
所以这只是一个建议,实施可以忽略它。
我的建议是使用AlertManager
每5分钟安排一次服务,然后在服务有效负载中请求一次调用requestSingleUpdate
。这样可以省电。缺点是GPS芯片需要一些时间才能收到卫星信号,在良好条件下(首次定位时间或TTFF)大约需要30秒到1分钟。在处理完所有待处理的请求后,它再次变冷。因此,在下一个服务执行中,我想,TTFF可能与之前的迭代一样高。 (除非您使用NETWORK_PROVIDER,但准确度较低)。
答案 1 :(得分:1)
我得到了这个问题的解决方案。我使用AlarmManager
(每5分钟后重复一次警报)来注册gps然后我运行我的Gps 30秒并取消注册Gps。如果我在{{1然后我在这个方法中取消注册Gps。另外(如果我没有获得新位置)我在30秒后通过处理程序取消注册Gps。当我再次需要Gps时,我遵循相同的过程。通过这种方式我的Gps工作最多30秒不是整个时间直到服务运行。