1

我有一个可以在有或没有位置的情况下运行的 android 应用程序。在活动中处理这种情况很简单:我设置了一个位置侦听器并等待一个进度对话框,但允许用户中止等待(碰巧如果位置提供程序被禁用,没有特殊错误就是永远返回位置......很好)。

但是,我也有一项需要位置的服务。该服务可能在活动之前运行,所以我不能依赖活动来获取位置(或不)。

问题是如何在服务中处理这种情况。我可以等待位置,但由于我不能依赖用户中止,我怎么知道何时停止等待,并假设没有可用的位置?看来我可以做类似的事情,

  1. 使用“获取位置”操作安排服务,它设置位置侦听器,等待更新,使用“刷新”操作在 3 分钟后安排相同的服务
  2. 在服务操作“刷新”中,获取最后一个已知位置,并对此感到满意。它要么获得,要么没有。如果它为空,我们知道我们没有位置并且我们已经尽力了。

看起来这会起作用,但它变得越来越复杂,因为我不能再使用简单的意图服务(我假设),因为如果意图服务在 onHandleIntent() 之后自行停止,那么将不会收到 on location changed 事件。

无论如何,它变得有点复杂,所以我想知道是否有更简单的方法。

4

1 回答 1

0

UpdateService - 实际执行更新工作的意图服务。这个只是调用 getLastKnownLocation() 来获取位置。

LocationService - 注册位置更新的常规服务,并且还设置了一个计时器以在 2 分钟内唤醒。要么我们得到位置更新,要么计时器关闭。如果我们得到位置更新,我们取消计时器。在这两种情况下,我们都取消注册位置更新,并启动 UpdateService 来完成实际工作,然后停止我们自己。

我们将 LocationService 安排为重复警报作为我们的“后台”进程。

该活动以不同的方式处理事情。它请求位置更新,并提出一个对话框。我们要么获取位置更新,要么用户取消对话。无论哪种方式,我们都取消注册位置更新,然后直接启动 UpdateService(不是 LocationService,我们已经在这里获得了位置)。

于 2010-12-24T20:31:52.457 回答