我的应用正在使用 requestLocationUpdates (来自GPS和网络,以先到者为准)。
我的代码:
LocationManager lm = (LocationManager) context
.getSystemService(Context.LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,
myLocationListenerInstance);
timeout = new Timer();
timeout.schedule(myGetLastKnownLocationInstance, TIMEOUT);
myGetLastKnownLocationInstance正在使用 getLastKnownLocation 。
我的问题:
从当前正在运行的Activity调用此代码时,myLocationListenerInstance将在少于TIMEOUT秒内收到通知。
然而,当从后台服务调用时,我正在超时,并且输出是通过最后已知的位置。最糟糕的是,在调查测量的位置时,时间戳小于 TIMEOUT !
即使TIMEOUT设置为一分钟,我也会遇到这种情况。
有什么建议吗?感谢
答案 0 :(得分:0)
如果我理解正确,它在您的Activity运行时有效,但是一旦您的Activity关闭,并且您希望后台服务正在运行,您的代码将无法在后台服务中按计划运行。
您确定您的后台服务正在运行吗?
您可能需要使用AlarmManager,启动粘滞,唤醒锁定和/或startForeground,以确保在您希望代码运行时服务正在运行。
答案 1 :(得分:0)
我的问题:
从当前正在运行的Activity调用此代码时, myLocationListenerInstance正在以小于的方式获取通知 TIMEOUT秒。
根据requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener),第二个参数允许您设置位置更新之间的最小时间间隔(以毫秒为单位)。
从上面提到的android API文档:
可以使用minTime控制位置更新间隔 参数。位置更新之间经过的时间永远不会 小于minTime,虽然它可能更多取决于位置 提供程序实现和其他请求的更新间隔 应用
您可以将minTime
(在您的情况下为0
)设置为TIMEOUT
并完全删除Timer
,除非您的计时器在其他地方使用。