gpt4 book ai didi

android-location - 我可以完全在后台服务中运行 Android GeoFencing 吗?

转载 作者:行者123 更新时间:2023-12-02 13:29:52 24 4
gpt4 key购买 nike

我有一个几乎不需要用户交互的应用程序,但需要地理围栏。我可以完全在后台服务中运行它吗?

服务第一次运行时会有一个Activity。此 Activity 将启动一个服务并为 BOOT_COMPLETED 注册一个 BroadcastReceiver,因此该服务将在启动时启动。此事件不太可能再次运行。

该服务将设置一个定期响起的警报,这将导致 IntentService 从网络下载位置列表。然后,此 IntentService 将在这些位置周围设置地理围栏,并创建 PendingIntents,当接近这些位置时将触发该 PendingIntents。反过来,这些 PendingIntents 将导致另一个 IntentService 采取一些操作。

所有这些都需要在后台进行,除了安装后首次启动 Activity 之外,无需用户交互。因此,该 Activity 不会与 LocationClient 或任何位置服务交互。

实际上,我已经通过邻近警报进行了设置,但出于电池生命周期的原因希望迁移到新的地理围栏 API。但是,我听说在服务中使用 LocationClient 可能会出现一些问题。具体来说,我所听到的(抱歉,没有引用资料,只是道听途说):

  • 位置客户端依赖用户界面可用性来进行错误处理
  • 当从后台线程调用时,LocationClient.connect() 假定它是从主 ui 线程(或具有事件循环程序的其他线程)调用的,因此如果我们从后台线程中运行的服务调用此方法,则永远不会调用连接回调

当我进行调查时,我看不出有任何原因会出现这种情况,或者为什么它会阻止我做我想做的事情。我希望它几乎可以替代proximityAlerts...

有人能解释一下这里的情况吗?

最佳答案

最好的办法就是尝试一下,对吧?你的策略看起来不错。

when called from background thread, LocationClient.connect() assumes that it is called from main ui thread (or other thread with event looper), so connection callback is never called, if we call this method from service running in background thread.

我知道这不是真的。我有一个从 Activity 启动的服务,并调用连接回调。

我不知道接近警报;但我似乎找不到 API 来列出我的地理围栏。我担心我的数据库(sqlite)和实际的围栏可能会不同步。我认为这是一个设计缺陷。

LocationClient 需要 UI 的原因是设备可能没有安装 Google Play 服务。谷歌设计了一种狡猾而复杂的机制,允许您的应用程序提示用户下载它。在我看来,整件事是可怕的、可怕的。这都是“假设假设”编程。

(他们为 google IO 2013 匆忙推出了很多东西。并非所有内容都有详细记录,其中一些似乎有点“粗糙”)。

关于android-location - 我可以完全在后台服务中运行 Android GeoFencing 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17458564/

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