0

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

有什么建议么?谢谢

4

2 回答 2

0

如果我对您的理解正确,它在您的 Activity 运行时工作,但是一旦您的 Activity 关闭,并且您希望后台服务正在运行,您的代码就不会按计划在后台服务中工作。

你确定你的后台服务正在运行吗?

您可能需要使用 AlarmManager、start sticky、唤醒锁和/或 startForeground 来确保在您希望代码运行时服务正在运行。

于 2013-04-04T21:16:02.617 回答
0

我的问题:

从当前正在运行的 Activity 调用此代码时,myLocationListenerInstance 会在不到 TIMEOUT 秒内收到通知。

根据requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener),第二个参数允许您设置位置更新之间的最小时间间隔,以毫秒为单位

从上面提到的 android API 文档中:

可以使用 minTime 参数控制位置更新间隔。位置更新之间的经过时间永远不会小于 minTime,尽管它可能更多取决于位置提供程序的实现和其他应用程序请求的更新间隔。

您可以设置minTime0在您的情况下)TIMEOUT并完全放弃Timer,除非您的计时器在其他地方使用。

于 2015-12-28T20:30:57.263 回答