在运行时更改融合位置优先级

Posted

技术标签:

【中文标题】在运行时更改融合位置优先级【英文标题】:Change Fused Location priority during runtime 【发布时间】:2015-07-11 15:04:56 【问题描述】:

我有两个意图服务: 1. 使用 Fused Location API 在后台接收位置更新。 2. 使用Activity Recognition API在后台接收Activity Recognition。

每当我检测到用户静止不动时,我希望能够将融合位置的优先级从 PRIORITY_HIGH_ACCURACY 更改为 PRIORITY_BALANCED_POWER_ACCURACY。

我听说过 removeLocationUpdates() 然后调用 requestLocationUpdates() 但我不能使用它,因为我只在后台运行没有活动的意图服务。

任何帮助都会有所帮助。

【问题讨论】:

为什么不能在活动识别IntentService 中调用requestLocationUpdates() 因为 GoogleApiClient 没有在那里连接,并且意图服务根本不知道 GoogleApiClient 对象......有什么办法可以将该对象从活动发送到意图服务? 【参考方案1】:

您的应用可以同时在多个地方连接到GoogleApiClient。在您的活动识别IntentService 中使用blockingConnect() 连接到GoogleApiClient 会更容易,这样您可以在需要时直接调用requestLocationUpdates()

注意requestLocationUpdates()Javadoc 上的评论:

任何先前注册的具有相同 PendingIntent(由equals(Object) 定义)的请求都将被此请求替换。

所以应该不需要打电话给removeLocationUpdates()

【讨论】:

谢谢...所以您是说要在 Activity Recognition Intent 服务中与 GoogleApiClient 建立新连接,并在我需要时请求?

以上是关于在运行时更改融合位置优先级的主要内容,如果未能解决你的问题,请参考以下文章

融合位置 API 在关闭谷歌地图后给出高度不准确的位置

Google Play 融合位置和 GPS

贪心+优先队列之更改优先级-hdu1896

融合位置 API 运行时权限错误

如何更改正在运行的 java 进程的优先级?

通知在更新时跳过另一个通知