首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我能在后台服务中完全运行Android GeoFencing吗?

我能在后台服务中完全运行Android GeoFencing吗?
EN

Stack Overflow用户
提问于 2013-07-03 21:39:58
回答 1查看 2.8K关注 0票数 6

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

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

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

所有这些都需要在后台进行,除了安装后第一次开始活动之外,没有任何用户交互。因此,该活动将不会与LocationClient或任何位置服务交互。

实际上,我已经在proximityAlerts中设置了这个程序,但出于电池寿命的原因,我希望转到新的Geofencing。但是,我听说在服务中使用LocationClient可能会出现一些问题。具体来说,我所听到的(抱歉,没有引用,只是传闻的说法):

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

当我调查的时候,我看不出为什么会这样,或者为什么它会阻止我做我想做的事情。我希望这几乎是proximityAlerts的替代品.

有人能对这里的事情有所了解吗?

EN

回答 1

Stack Overflow用户

发布于 2013-08-13 23:07:55

最好的办法就是试一试,对吧?你的策略似乎很合理。

代码语言:javascript
复制
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.

我知道这不是真的。我有一个从活动开始的服务,连接回调被调用。

我不知道近邻警报,但我似乎找不到一个API来列出我的GeoFences。我担心我的数据库(sqlite)和实际的围栏可能不同步。在我看来,这是一个设计缺陷。

LocationClient需要UI的原因是该设备可能没有安装Google服务。谷歌已经开发了一种巧妙而复杂的机制,可以让你的应用程序提示用户下载它。在我看来,整件事都是可怕和可怕的。所有的“什么-如果”编程。

(他们把很多东西赶出了谷歌IO 2013的大门。并不是所有的都有详细的文档记录,而且其中一些看起来有点“边缘粗糙”)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17458564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档