【问题标题】:Geofencing in background背景中的地理围栏
【发布时间】:2020-02-24 18:49:10
【问题描述】:

开始问题:如何在不打开应用程序的情况下添加/删除地理围栏?

当用户关闭位置时,所有地理围栏都会被删除。引入地理围栏时,我正在对其进行测试,并且能够通过处理"android.location.PROVIDERS_CHANGED" 广播在后台添加/删除地理围栏,但分支上仍然有此代码。

目前,由于 API26,此广播在放入清单时不会触发,我们需要为此操作注册(和取消),例如在ActivityService 的运行时。这不是我的情况的解决方案,我想在打开位置时再次添加地理围栏,或者只是阻止删除已经添加的。

我确实看到了针对这种情况的两种解决方案,但都有一些缺陷......

  1. 前台服务 - 在位置开启/关闭时添加/删除地理围栏的粘性服务,Service 可以接收PROVIDERS_CHANGED。但我不喜欢粘着Notification 总是为了这个微不足道的目的...
  2. 工作/工作 - 检查位置状态并根据结果添加/删除地理围栏,最后重新安排自己的实例,例如1h,再一次。短期服务(最多 5 秒)不需要有“视觉表示” - Activity 在前景或粘性 Notification - 但几秒钟就足以检查位置状态和使用地理围栏(只是逻辑,非常漂亮快)

我没有测试第二种方法,但这似乎是一种解决方法,肯定效率很低。我想公平地说,在请求许可时,我会告知用户在后台“监听”位置的目的(API29 上也是 ACCESS_BACKGROUND_LOCATION)。那么当应用程序处于后台/被杀死时,我能做些什么来保持这些栅栏活着呢?

【问题讨论】:

    标签: android android-location geofencing android-geofence


    【解决方案1】:

    ForegroundService 是您拥有的更好的选择,截至今天,有许多自定义 ROM 会杀死后台的应用程序。 我已将foregroundService 用于相同目的,并且运行良好。

    【讨论】:

    • ForegroundService 实际上是我的目的的一种也是唯一一种优雅的方式(?),但我仍然不会为此保留粘性通知(位置状态更改) - 它会打扰用户占用屏幕上的宝贵空间,这些实例中的大多数迟早会在我的应用程序甚至系统级别被禁用。只有很少的地理围栏,大部分用户永远不会触发一个,下一个不太大的部分用户一直启用定位服务,所以这个通知对他们来说只是垃圾......
    猜你喜欢
    • 2021-12-22
    • 1970-01-01
    • 2014-11-24
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多