【发布时间】: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