Android LocationManager requestLocationUpdates在WearableListenerService中

时间:2015-07-29 20:39:15

标签: android wear-os locationmanager android-wear-data-api

我想知道如何(如果可能的话)在短期服务中为我的requestLocationUpdates成功运行LocationManager - 在这种情况下是Android WearableListenerService

例如,我有一个服务,当可穿戴设备发送消息说它需要更新时运行。此更新的一部分是根据用户的当前位置查询外部API以查找某些数据。如果没有"最后知道"位置从getLastKnownLocation返回我正在从位置管理员处注册requestLocationUpdates以获取设备的当前位置,然后将完成我的工作。

但是,短期服务存在并在位置管理器收到位置更改事件之前被销毁,因此回调监听器不会触发,或者我得到"sending message to a Handler on a dead thread" errors like this

我的问题是,我是否可以强制此服务或多或少阻止,直到找到一个位置并且onLocationChanged回调在调用退出(onDestroy)之前触发?

或者,处理此问题的正确/正确机制是什么?

1 个答案:

答案 0 :(得分:-1)

一种方法是从WearableListenerService中启动IntentService。在IntentService中,您可以在onHandleIntent()中发送您的位置请求,并且您可以阻止它,直到您收到您的响应(希望超时);因为onHandleIntent是在工作线程上调用的,所以你不会引起任何问题。当您收到结果后,您可以更新可穿戴应用;这种方法看起来非常简单。