Android 地理围栏是不是能够在重启后幸存下来?

Posted

技术标签:

【中文标题】Android 地理围栏是不是能够在重启后幸存下来?【英文标题】:Are Android geofences surviving a reboot?Android 地理围栏是否能够在重启后幸存下来? 【发布时间】:2013-06-07 02:42:22 【问题描述】:

系统是保留它们还是我必须在重新启动后再次添加它们?我在https://developer.android.com/training/location/geofencing.html的文档中没有找到任何相关信息

【问题讨论】:

请参阅my answer to a similar question,了解您需要重新注册地理围栏的所有情况。 【参考方案1】:

地理围栏不会在重新启动后持续存在。

您必须监听 BOOT_COMPLETED 操作并再次添加地理围栏。

注意:如果您的应用安装在外部存储(SD 卡) 上,您将永远不会收到启动完成操作。所以你必须在manifest tag 中指定android:installLocation="internalOnly"。 这是因为,android 设备会在设置外部存储之前广播 BOOT_COMPLETED 动作

【讨论】:

嗨,在这个developer.android.com/training/location/geofencing.html 教程中,我真的不明白SharedPreferences 的用法,因为它们从未用于访问数据。你知道为什么要使用持久存储吗? 当您被地理围栏触发时,您将获得该特定地理围栏的 ID。但在实时我们有很多信息,而不仅仅是一个 id。 SharedPreferences 就像存储 ousr 地理围栏信息的存储,例如 id、消息、lat、lng 以及与之相关的其他一些值。 感谢 Sundeep,这听起来合乎逻辑。我已经在数据库中存储了地理围栏数据。我只是感到困惑,并假设可能是 GeoFence Api 使用了已保存在 SharedPreferences 中的数据。 默认为 android:installLocation="internalOnly" 因此不需要在清单中明确声明,但这样做也不错。【参考方案2】:

我没有找到任何文件证实这一点,但我自己的实验表明它们不会在重新启动后持续存在。

我的设置如下:

运行应用程序 应用程序在首次启动时仅将各种地理围栏设置为 NEVER_EXPIRE 退出应用程序 在有围栏的区域使用手机 确认栅栏触发发送到 IntentService 的待处理意图 离开区域 重启手机 重新进入区域 未决意图不会发送到 IntentService

如果有人从 Google 的某个人那里获得更多信息,请发表评论!

【讨论】:

您必须在重新启动时再次添加地理围栏。正如文档所说,重新启动时会删除地理围栏。【参考方案3】:

您希望保留哪些数据?是您设备中的地理围栏区域还是 Google Play Service Location API 存储的地理围栏区域?

我认为设备需要向 Google Play 服务(通过 LocationClient)注册一个区域(由其纬度、经度和半径定义)。您还需要提供到期时间、要通知的转换类型以及通知您的 Intent。

此区域将不会(远程)存储在您的应用中。当它超过过期时间时,Google Play Service 会自动删除它。您也可以将其设置为 NEVER_EXPIRE。 如果区域尚未过期,Google Play 服务将通知您的应用(通过您在调用 addGeofences 时发送的意图)。

区域的来源(纬度、经度、半径)取决于您的实施。

【讨论】:

查看这些文档:developer.android.com/reference/com/google/android/gms/location/… 和 [developer.android.com/reference/com/google/android/gms/location/…>, android.app.PendingIntent, com.google.android.gms.location.LocationClient.OnAddGeofencesResultListener)] 我刚刚又看了一下 GeofencingDetection 示例应用程序。 我刚刚又看了一下 GeofencingDetection 示例应用程序。它不需要 INTERNET 权限,只需要 ACCESS_FINE_LOCATION。所以地理围栏区域很可能存储在本地。但是,当禁用 Wifi 和 3G 时,我没有收到任何转换的通知。我假设 GPS 是最准确的,我应该收到转换通知。 问题询问系统(我假设他的意思是 Google Play 服务)在重新启动后是否仍然存在地理围栏,无论到期时间如何,但您没有回答这个问题。

以上是关于Android 地理围栏是不是能够在重启后幸存下来?的主要内容,如果未能解决你的问题,请参考以下文章

在后台某个时间后未触发Android地理围栏?

如何使用 Android 地理围栏 API?

Stream.listen 在 web 上完全重启 Flutter 后幸存下来

Android:提高地理围栏的准确性

Android 地理围栏是不是保持活动状态直到删除/过期或仅在我的 PendingIntent 启动之前

Android O 地理围栏触发延迟