locationListener 仅在服务中请求时调用一次

Posted

技术标签:

【中文标题】locationListener 仅在服务中请求时调用一次【英文标题】:locationListener is only called once when requested in a Service 【发布时间】:2011-06-22 08:25:43 【问题描述】:

我写了一个小应用程序,它有一个 Activity 来控制和显示 数据,以及从 GPS 获取数据并将其发送到 活动。 这样做的原因是,即使在 Activity 结束后我也喜欢它运行 退出了。。

我在位置侦听器删除的末尾做了一项工作 监听器并重新定义它..

   lm.removeUpdates(locationListener); 
   lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, iGPSMovement, locationListener); 

但这并不好,现在它在我的 HTC 愿望 Z 上失败了。

有人遇到过这种情况吗? 解决方法是什么?

我编写了一个不使用服务的小型应用程序(一个活动),并且 与仅在 onCreate.. 调用的 requestLocationChange 一起工作正常。

请帮忙 金

【问题讨论】:

您可以发布您的服务代码吗? 谢谢,我已经完成了一个全新的代码并且正在处理它,我相信这是我的服务监听器功能在玩我。当我完成测试时,我会更新你。 . 好的,所以我尝试重写一个超级简单的服务和活动并使用广播接收器,它就像一个魅力...... 所以我转换了我的应用程序,但它仍然无法正常工作......但后来我发现 Meters 运动必须为 0 才能使请求工作在我的 Desire 上......这是奇怪的还是什么?无论如何,这解决了我的问题.. lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, locationListener);是我最终的结果.. 【参考方案1】:

不确定这是否重要,但您必须将距离设置为 0 的原因是,这是单元必须移动的最小距离才能触发线程。因此,如果电话放在您的桌子上,并且在程序开始时没有移动至少 X 距离,您将不会获得更新。通过将其设置为 0,您将强制程序以最小时间间隔更新,而不管移动距离如何。我很确定它只有在满足两个最低条件时才有效。 IE。已经超过 5 秒,你已经移动了 10 米。

【讨论】:

【参考方案2】:

好的,所以我尝试重写一个超级简单的服务和活动,并使用广播接收器,这就像一个魅力.. 所以我转换了我的应用程序,但它仍然无法正常工作......但我随后发现 Meters 运动必须为 0 才能使请求工作在我的 Desire 上......这是奇怪的还是什么?无论如何,这解决了我的问题..

lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, locationListener);

这是我最终得到的结果,并且无论我如何在服务和活动之间进行通信,它都可以修复所有问题..

【讨论】:

以上是关于locationListener 仅在服务中请求时调用一次的主要内容,如果未能解决你的问题,请参考以下文章

是否需要为具有活动 LocationListener 的 Android 服务获取唤醒锁?

带有 locationListener 回调的 Android 服务

LocationListener 没有提供任何速度更新

android:LocationListener 永久运行

LocationListener 在 android 服务中的某个时间后不提供更新

对远程 WebDriver 服务器的 HTTP 请求在 60 秒后超时。仅在通过任务调度程序运行时发生