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:

LocationResultLocationAvailability 都发送到给定的 PendingIntent。您可以使用 hasResult(Intent)extractResult(Intent)hasLocationAvailability(Intent)extractLocationAvailability(Intent) 从 Intent 中提取数据。

当您检查第一种情况时,您并未处理(或忽略)位置可用性的变化。

【讨论】:

以上是关于FusedLocation Pending Intent 有时在没有位置的情况下调用的主要内容,如果未能解决你的问题,请参考以下文章

我的所有 FusedLocation 请求的列表

FusedLocation 不会触发 android api <= 21 的 locationcallback

当我在谷歌设置android中关闭和打开位置时,FusedLocation 不起作用

FusedLocation GoogleApi - 侦听器不得为空 (Xamarin.Android)

fusedLocation API 间隔与关闭 GPS 无线电有何关系

英语pending signals怎么翻译