Android LocationManager请求WearableListenerService中的LocationUpdate
我想知道如何(如果可能的话)在一个短期服务中为我的Android LocationManager请求WearableListenerService中的LocationUpdate,android,wear-os,locationmanager,android-wear-data-api,Android,Wear Os,Locationmanager,Android Wear Data Api,我想知道如何(如果可能的话)在一个短期服务中为我的LocationManager成功运行requestLocationUpdates——在这个例子中是一个AndroidWearableListenerService 例如,我有一个服务,当可穿戴设备发送消息说它需要更新时运行。此更新的一部分是根据用户的当前位置查询某些数据的外部API。如果没有从getLastKnownLocation返回“上次已知”位置,我将从位置管理器注册requestLocationUpdates,以获取设备的当前位置,然后
LocationManager
成功运行requestLocationUpdates
——在这个例子中是一个AndroidWearableListenerService
例如,我有一个服务,当可穿戴设备发送消息说它需要更新时运行。此更新的一部分是根据用户的当前位置查询某些数据的外部API。如果没有从getLastKnownLocation
返回“上次已知”位置,我将从位置管理器注册requestLocationUpdates
,以获取设备的当前位置,然后执行我的操作
但是,在位置管理器接收到位置更改事件之前,该短期服务存在并被销毁,因此回调侦听器不会启动,否则我将无法启动
我的问题是,在调用退出(onDestroy
)之前,我是否可以强制此服务或多或少阻塞,直到找到一个位置并触发onLocationChanged
回调
或者,处理这个问题的正确机制是什么?一种方法是从您的WearableListenerService内部启动IntentService。在IntentService中,您可以在onHandleContent()中发送位置请求,并可以阻止该请求,直到收到响应(希望有一个超时);因为onHandleIntent是在工作线程上调用的,所以不会引起任何问题。当你得到结果后,你可以更新你的可穿戴应用程序;这种方法似乎非常简单。您的WearableListenerService是如何启动的?通过MessaeApi,并从可穿戴设备发送消息。您是否找到了解决此问题的好方法?我想我更好奇的是“阻塞机制”。阻塞是否发生在次要IntentService
onHandleIntent()中
或者在我现有的WearableListenerService中,我仍然需要在请求位置更新时进行阻止。在异步回调可以运行之前,以这种方式阻塞的首选/指定机制是什么?或者我只是误解了你的方法。你应该在你的IntentService#onHandleIntent()中进行阻止,因为那将在一个工作线程上;这就是启动IntentService背后的全部要点。如何阻止?使用什么机制来实际阻止该线程?只是一个简单的等待超时?