【问题标题】:FusedLocationProviderClient.getCurrentLocation(): Background apps calling this method will be throttled under background location limitsFusedLocationProviderClient.getCurrentLocation():调用此方法的后台应用程序将在后台位置限制下受到限制
【发布时间】:2021-05-16 03:40:01
【问题描述】:

the docs 中,FusedLocationProviderClient.getCurrentLocation() 的内容如下:

此方法可能会返回几秒钟前的位置,但永远不会返回更早的位置。这适用于需要一个新的当前位置的前台应用程序。

调用此方法的后台应用程序将在后台位置限制下受到限制,因此后台应用程序可能会发现该方法更频繁地返回空位置。

“将被限制”的含义是什么?

在我的情况下,我有一个最多每 30 分钟更新一次的小部件。授予适当的位置权限(前景和背景)后,我已经可以使用 FusedLocationProviderClient.getLastLocation() 访问最后一个已知位置,并且工作正常。

但我想探索一种更积极的方法,使用getCurrentLocation() 而不是getLastLocation()。对于前台没有应用程序的小部件,即使将LocationRequest.PRIORITY_HIGH_ACCURACY 传递给getCurrentLocation(),我也从来没有看到状态栏中出现的小“位置”图标(地图图钉图标),就像我期望的那样,如果设备正在积极请求新的位置修复。是的,请求并授予了ACCESS_FINE_LOCATION 权限。在应用程序(在前台)中使用相同的方法调用,我确实看到了“位置”图标。

那么,对于一个小部件,如果它会以某种方式受到显着阻碍,那么在后台使用getCurrentLocation() 而不是getLastLocation() 有什么真正的好处吗?有时它似乎需要大约 30 秒才能完成(在任何位置访问的状态栏中都没有可见的标志)然后返回 null 位置无论如何,那么它实际上在做什么?

我可以启动前台服务(带有通知),但如果用户无论如何都会看到(通过状态栏中的“位置”图标)正在积极访问该位置,这似乎有点过头了。

那么究竟什么是“节流”?只是限制频率(小部件最多每 30 分钟更新一次,所以它几乎不是“频繁”)?或者限制准确性(例如没有 GPS)?

【问题讨论】:

    标签: android fusedlocationproviderapi android-fusedlocation fusedlocationproviderclient


    【解决方案1】:

    我想可能和这些background location limits有关:

    为了降低功耗,Android 8.0(API 级别 26)限制了应用在后台运行时检索用户当前位置的频率。在这些情况下,应用每小时只能接收几次位置更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多