gpt4 book ai didi

android - LocationManager.PROVIDERS_CHANGED_ACTION 不适用于 API 26 及更高版本

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:26:20 27 4
gpt4 key购买 nike

我正在使用以下代码来获取位置开/关事件。

<receiver
android:name=".receivers.GpsReceiver"
android:enabled="true">
<intent-filter>
<action android:name="android.location.PROVIDERS_CHANGED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>

我正在开发基于地理围栏的应用程序。基于Re-register geofences only when required我们必须在应用程序收到 GEOFENCE_NOT_AVAILABLE 警报后重新注册地理围栏。这通常发生在禁用 NLP(Android 的网络位置提供程序)之后。

通过使用这个广播接收器,我在启用 Android 的网络位置提供程序时重新注册了地理围栏。

但是从 API 级别 26 开始,这个广播接收器将永远无法工作。看 Background Execution Limits .

那么如何在 API 26 及更高版本中完成相同的任务呢?

注意:即使应用程序在后台,我也需要重新注册地理围栏。

最佳答案

您可以切换为通过 Context.registerReceiver() 动态注册接收器,但是恕我直言,没有可靠的方法让它们“永远”注册,因为系统无论如何都会终止您的进程在某些条件下。

当然,您可以使用例如white listed broadcast receivers , AlarmManager, JobScheduler 等。但这并不是电池和其他资源消耗方面的最佳方式。实际上这就是谷歌禁用隐式广播的原因。

要点是:通过在 Oreo 中禁用隐式广播,Google 会强制您使用某种重复性工作来执行此类操作。因此,您不需要监听 NLP 状态更新,您只需在您的重复工作中一遍又一遍地使用 GeofencingClient.addGeofences(如果启用了 NLP)设置您的地理围栏。

关于android - LocationManager.PROVIDERS_CHANGED_ACTION 不适用于 API 26 及更高版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48659124/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com