0

我的应用正在使用requestLocationUpdates(来自GPS和网络,以先到者为准)。requestLocationUpdates不适用于服务

我的代码:

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

我的问题:

当调用从当前正在运行的活动该代码,myLocationListenerInstance在不到TIMEOUT秒得到一个通知。

但是,当从后台服务调用时,我得到超时,输出是通过最后一个已知位置输出的。最糟糕的是,当调查测量位置时,时间戳小于TIMEOUT

即使将TIMEOUT设置为一分钟,我也会收到此问题。

有什么建议吗?谢谢

回答

0

如果我的理解正确,它在您的活动正在运行时起作用,但是一旦您的活动关闭,并且您希望后台服务正在运行,您的代码将无法按预定时间在后台服务中运行。

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

您可能需要使用AlarmManager,启动粘滞,唤醒锁定和/或startForeground,以确保在您希望代码运行时服务正在运行。

+0

似乎问题是位置更新只能从主UI线程请求。显然,在我的服务中,我使用了一些辅助线程。知道这一点,我仍然坚持.. – Mugen 2013-04-05 21:19:05

+0

@Mugen,不,你可以肯定从后台服务调用requestLocationUpdates。我会阅读服务生命周期和线程处理,我的猜测是你的服务可能开始,然后只是停止......再回到我上面的答案。 – logray 2013-04-07 18:54:44

0

我的问题:

当调用从正在运行, 的myLocationListenerInstance是得到一个通知,在不到 TIMEOUT秒活动的代码。

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

从Android API文档如上所述:

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

您可以设置minTime(这是0你的情况),以TIMEOUT并删除Timer干脆,除非你的计时器别处使用。

相关问题