【问题标题】:Geofence transition PendingIntent blocked by the OS on Android Oreo地理围栏转换 PendingIntent 被 Android Oreo 上的操作系统阻止
【发布时间】:2018-04-06 16:54:07
【问题描述】:

这只发生在 Android Oreo 上。我正在使用播放服务 11.4.2。 我正在使用 GeofencingClient 和 addGeofences 方法将地理围栏注册到一个处理地理围栏转换的 IntentService 的 pendingIntent。 看起来播放服务发送的意图在某些情况下被操作系统阻止了。

系统记录以下内容:

Background start not allowed: service Intent { cmp=my.app.id/my.package.struct.GeofenceTransIntentService (has extras) } to my.app.id/my.package.struct.GeofenceTransIntentService from pid=-1 uid=10154 pkg=my.app.id

在以下情况下添加地理围栏后:

  • 当我在设备启动后添加它时
  • 当我在应用程序被刷卡后添加它时 在这两种情况下,应用程序实际上已经在后台运行(因为我能够运行添加地理围栏的代码),因为我会监听 PROVIDERS_CHANGED、BOOT_COMPLETED。

【问题讨论】:

  • 你能告诉我们你正在使用的代码吗?

标签: android google-play-services android-geofence google-location-services


【解决方案1】:

这是由新的Android Oreo background service limitations 引起的。

您必须将 PendingIntent 从使用 Service 更改为使用 BroadcastReceiver

有关更多信息和示例代码,请参阅此CodeLab

【讨论】:

【解决方案2】:

除了在接受的答案中提到的切换到广播接收器之外,我想指出,虽然您仍然会收到 BOOT_COMPLETED,但您将无法再收到 PROVIDERS_CHANGED。

PROVIDERS_CHANGED 是隐式广播,不在broadcast exceptions 的列表中。

BOOT_COMPLETED 位于广播例外列表中,这就是您仍会收到它的原因。

如果您想了解在切换位置服务时获取钩子的替代方法,请参阅my answer to a related question 了解更多详情。

【讨论】:

    猜你喜欢
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    • 2012-12-24
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多