gpt4 book ai didi

android - 从服务访问android位置?

转载 作者:行者123 更新时间:2023-11-29 16:09:06 24 4
gpt4 key购买 nike

我在从服务启动的线程请求位置更新时遇到问题。

我的应用程序需要从后台服务获取位置更新(无需任何 UI 线程)。我将解释我的应用程序的结构。

  1. 它有一个由 Boot Receiver 启动的服务。
  2. 在服务的 onStartCommand() 中,它启动一个调度程序线程。
  3. 调度程序线程请求位置更新。

问题是调度程序调用 locationMgr.requestLocationUpdates()它说 无法在没有调用 Looper.prepare() 的线程内创建处理程序我在其他人身上看到过类似的问题,但找不到任何解决方案。我听说我们可以直接从服务中调用以获取位置更新而没有任何问题,但由于我找不到 sleep 服务的方法(如调度程序线程),我想我需要一个单独的线程。

请解释为什么会这样? android 是否需要 UI 线程来请求位置?有什么办法可以通过改变我的应用程序结构来解决吗?

最佳答案

Looper是什么不断轮询线程队列 Message的/Runnable s(那些通过该线程上的 Handler 发布的)。 UI线程默认有一个。对于自定义线程,您需要在启动线程之前进行设置。

As mentioned in the example:

Class used to run a message loop for a thread. Threads by default do not have a message loop associated with them; to create one, call prepare() in the thread that is to run the loop, and then loop() to have it process messages until the loop is stopped.

现在,RequestLocationUpdates()需要一种机制来向您的线程提供更新,但您的线程没有 Looper投票。

考虑搬家 RequestLocationUpdates()及其对应的removeUpdates()到服务线程。很可能是服务开始和停止的地方。

关于android - 从服务访问android位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15024051/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com