requestLocationUpdates不适用于Service

时间:2013-04-04 21:03:38

标签: android location android-service locationmanager android-context

我的应用正在使用 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设置为一分钟,我也会遇到这种情况。

有什么建议吗?感谢

2 个答案:

答案 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,除非您的计时器在其他地方使用。