【发布时间】:2015-08-08 16:14:03
【问题描述】:
我正在开发一个可用于监控 Android 设备上的地理围栏的库。我注意到在设备设置中关闭并重新打开位置服务后,我在 Google Play 位置服务 GeofencingApi 类中注册的地理围栏丢失了。
我看到folks 建议我需要在我的AndroidManifest.xml 文件中注册android.location.PROVIDERS_CHANGED 广播接收器。我已经这样做了——但是只有当我在测试应用程序中添加和删除测试提供者时才会调用这个广播接收器。在设备设置中切换定位服务时,我根本没有收到它。
我做错了吗?有谁知道如何可靠地确定用户何时在设备设置中切换定位服务?我希望能够在后台看到这些事件——即使我的应用程序没有运行。
我想我可以设置一个在后台运行的重复任务,并定期检查位置服务是否已被切换,但这听起来很糟糕而且效率低下。
如果有帮助,我正在运行 Android 4.4.2 的 Moto G 上进行测试。到目前为止,我对地理围栏所做的一切都运行良好。
编辑:经过更多研究,我发现PROVIDERS_CHANGED 广播的行为因手机版本和型号而异。我的 Nexus 5 运行 Android 5.1 似乎工作正常 - 我能够定期收到 PROVIDERS_CHANGED 广播。我还有一部运行 4.4.x 的 Moto G 和 Moto X 手机,它们从未为我制作过 PROVIDERS_CHANGED 广播。 Android 4.2 上的三星 Galaxy S3 会为我生成广播,但在我将 Map Activity 与测试位置提供程序一起使用后停止播放。
无论如何,我决定暂时停止研究这个问题。我认为 Android 只是有缺陷。
【问题讨论】:
-
这可能会有所帮助stackoverflow.com/questions/10311834/… 另外您是否尝试将地理围栏数据保存在本地或其他地方以防止其被删除?
-
我已经在本地保存了地理围栏,所以我不会永远丢失它们(除非用户清除缓存)。那不是我的问题。我的问题是我没有收到通知我位置提供程序设置已更改的事件。 (即:我没有被告知它们已被操作系统删除,也没有被告知何时可以安全地重新加载)。
-
stackoverflow.com/questions/25156977/… 我注册了 providers_changed in code 你实际上需要一些代码才能得到一个体面的答案。带有 4.4.2 的 IDK 可能不起作用。我已经好几个月没有启动我的 android 开发环境了。