我有一个可以在有或没有位置的情况下运行的Android应用程序。在一个活动中处理这种情况很简单:我设置一个位置监听器并等待一个进度对话框,但允许用户中止等待(如果禁用位置提供者,那么没有特殊错误就是永远不会发生返回位置......很好)。
但是,我也有一个需要该位置的服务。服务可能在活动之前运行,因此我不能依赖活动来获取位置(或不是)。
问题是如何在服务中处理这种情况。我可以等待位置,但由于我不能依赖用户中止,我怎么知道何时停止等待,并假设没有位置可用?好像我可以做点什么,
似乎这会起作用,但它变得越来越复杂,因为我不能再使用简单的意图服务(我假设),因为如果意图服务在onHandleIntent()之后停止,那么on location changed事件将不会收到。
无论如何,它变得有点复杂,所以我想知道是否有更简单的方法。
答案 0 :(得分:0)
回答我自己的问题......这就是我最终解决这个问题的方法,
UpdateService - 实际执行更新工作的意向服务。这个只是调用getLastKnownLocation()来获取位置。
LocationService - 注册位置更新的常规服务,还设置在2分钟内唤醒的计时器。要么我们得到位置更新,要么计时器熄灭。如果我们得到位置更新,我们取消计时器。在这两种情况下,我们取消注册位置更新,并启动UpdateService来完成实际工作,然后停止自己。
我们将LocationService作为重复警报安排为我们的“后台”流程。
活动以不同的方式处理事情。它请求位置更新,并建立一个对话框。我们要么获得位置更新,要么取消用户取消对话框。无论哪种方式,我们取消注册位置更新然后直接启动UpdateService(不是LocationService,我们已经在这里获得了位置)。