Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android LocationManager请求WearableListenerService中的LocationUpdate_Android_Wear Os_Locationmanager_Android Wear Data Api - Fatal编程技术网

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
——在这个例子中是一个Android
WearableListenerService

例如,我有一个服务,当可穿戴设备发送消息说它需要更新时运行。此更新的一部分是根据用户的当前位置查询某些数据的外部API。如果没有从
getLastKnownLocation
返回“上次已知”位置,我将从位置管理器注册
requestLocationUpdates
,以获取设备的当前位置,然后执行我的操作

但是,在位置管理器接收到位置更改事件之前,该短期服务存在并被销毁,因此回调侦听器不会启动,否则我将无法启动

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


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

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

您的WearableListenerService是如何启动的?通过MessaeApi,并从可穿戴设备发送消息。您是否找到了解决此问题的好方法?我想我更好奇的是“阻塞机制”。阻塞是否发生在次要IntentService
onHandleIntent()中
或者在我现有的WearableListenerService中,我仍然需要在请求位置更新时进行阻止。在异步回调可以运行之前,以这种方式阻塞的首选/指定机制是什么?或者我只是误解了你的方法。你应该在你的IntentService#onHandleIntent()中进行阻止,因为那将在一个工作线程上;这就是启动IntentService背后的全部要点。如何阻止?使用什么机制来实际阻止该线程?只是一个简单的等待超时?