【发布时间】:2020-02-24 18:49:10
【问题描述】:
开始问题:如何在不打开应用程序的情况下添加/删除地理围栏?
当用户关闭位置时,所有地理围栏都会被删除。引入地理围栏时,我正在对其进行测试,并且能够通过处理"android.location.PROVIDERS_CHANGED" 广播在后台添加/删除地理围栏,但分支上仍然有此代码。
目前,由于 API26,此广播在放入清单时不会触发,我们需要为此操作注册(和取消),例如在Activity 或Service 的运行时。这不是我的情况的解决方案,我想在打开位置时再次添加地理围栏,或者只是阻止删除已经添加的。
我确实看到了针对这种情况的两种解决方案,但都有一些缺陷......
- 前台服务 - 在位置开启/关闭时添加/删除地理围栏的粘性服务,
Service可以接收PROVIDERS_CHANGED。但我不喜欢粘着Notification总是为了这个微不足道的目的... - 工作/工作 - 检查位置状态并根据结果添加/删除地理围栏,最后重新安排自己的实例,例如1h,再一次。短期服务(最多 5 秒)不需要有“视觉表示” -
Activity在前景或粘性Notification- 但几秒钟就足以检查位置状态和使用地理围栏(只是逻辑,非常漂亮快)
我没有测试第二种方法,但这似乎是一种解决方法,肯定效率很低。我想公平地说,在请求许可时,我会告知用户在后台“监听”位置的目的(API29 上也是 ACCESS_BACKGROUND_LOCATION)。那么当应用程序处于后台/被杀死时,我能做些什么来保持这些栅栏活着呢?
【问题讨论】:
标签: android android-location geofencing android-geofence