FusedLocation Pending Intent 有时在没有位置的情况下调用
Posted
技术标签:
【中文标题】FusedLocation Pending Intent 有时在没有位置的情况下调用【英文标题】:FusedLocation Pending Intent sometimes invoked without location 【发布时间】:2017-12-19 10:19:49 【问题描述】:我有一个意图服务,每分钟左右由 FusedLocationApi 调用,以通过 pending 定期监控位置。
@Override
protected void onHandleIntent(Intent intent)
if (intent != null && LocationResult.hasResult(intent))
LocationResult locationResult = LocationResult.extractResult(intent);
location = locationResult.getLastLocation();
else
Crashlytics.logException(new LocationException("Loc Intent Service invoked without location", new NullPointerException()));
它大部分时间都运行良好,但在生产中,在过去的 7 天里,我收到了 13,000 个由 FusedLocationApi 调用的服务事件,没有任何位置。 (感谢我添加的 Crashlytics 非致命异常)
为什么或何时会发生这种情况?我尝试在监视位置时禁用位置权限,在这种情况下,服务 在没有位置的情况下被调用,但只有一次或两次,之后在我重新打开位置权限之前它永远不会再次调用。
【问题讨论】:
在任何情况下,您都无法保证收到位置,您始终需要检查该位置是否为空。 【参考方案1】:根据requestLocationUpdates() documentation:
LocationResult
和LocationAvailability
都发送到给定的 PendingIntent。您可以使用hasResult(Intent)
、extractResult(Intent)
、hasLocationAvailability(Intent)
和extractLocationAvailability(Intent)
从 Intent 中提取数据。
当您检查第一种情况时,您并未处理(或忽略)位置可用性的变化。
【讨论】:
以上是关于FusedLocation Pending Intent 有时在没有位置的情况下调用的主要内容,如果未能解决你的问题,请参考以下文章
FusedLocation 不会触发 android api <= 21 的 locationcallback
当我在谷歌设置android中关闭和打开位置时,FusedLocation 不起作用
FusedLocation GoogleApi - 侦听器不得为空 (Xamarin.Android)