【问题标题】:requestLocationUpdates not working for ServicerequestLocationUpdates 不适用于服务
【发布时间】:2013-04-04 21:03:37
【问题描述】:

我的应用正在使用 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 秒内收到通知。

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

即使将 TIMEOUT 设置为一分钟,我也会遇到这种情况。

有什么建议吗?谢谢

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 似乎问题在于只能从主 UI 线程请求位置更新。显然,在我的服务中,我使用了一些辅助线程。知道了这一点,我还是卡住了..
    • @Mugen,不,您绝对可以从后台服务调用 requestLocationUpdates。我会阅读服务生命周期和线程处理,我的猜测是您的服务可能正在启动,然后只是停止......再次回到我上面的答案。
    【解决方案2】:

    我的问题:

    从当前正在运行的 Activity 调用此代码时, myLocationListenerInstance 在不到 超时秒数。

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

    来自上面提到的 android API 文档:

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

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

    【讨论】:

      猜你喜欢
      • 2021-01-05
      • 1970-01-01
      • 1970-01-01
      • 2013-06-13
      • 2020-09-03
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多