【问题标题】:android: handling optional locationandroid:处理可选位置
【发布时间】:2011-05-03 04:03:13
【问题描述】:

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

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

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

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

这似乎可行,但它变得越来越复杂,因为我不能再使用简单的意图服务(我假设),因为如果意图服务在 onHandleIntent() 之后自行停止,那么位置更改事件将不会收到。

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

【问题讨论】:

    标签: android android-location


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-23
      • 2014-09-09
      • 2014-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多