我有一个使用Awareness API设置围栏的安卓应用程序,当耳机插入时可以触发。
我已经按照示例中类似的代码实现了AwarenessFence:https://developers.google.com/awareness/android-api/fence-register。
我定义了一个PendingIntent:
PendingIntent.getBroadcast(context, 0, new Intent("my.application.packageFENCE_RECEIVER_ACTION"), 0)
然后在我的AndroidManifest.xml文件中,我有以下内容
<receiver android:name=".fence.FenceDetector$MyFenceReceiver">
<intent-filter>
<action android:name="my.application.packageFENCE_RECEIVER_ACTION" />
</intent-filter>
这是在清单文件中声明的,因为我希望即使我的应用程序在后台运行时,也能接收广播。
这在Android 7.0及以下版本中都可以正常工作,但当我在Android 8.0上运行时,出现了错误:
BroadcastQueue: Background execution not allowed: receiving Intent { act=my.application.packageFENCE_RECEIVER_ACTION
我猜想这是由于 Android O 上的新后台执行限制所导致的。
有人可以告诉我如何注册一个广播接收器,在运行 API 26 的 Android 设备上,在后台监听 awareness fence 触发器吗?
如果有什么不清楚的地方或者我需要解释些什么,请让我知道。
先谢谢了。
PendingIntent
都是正确的,@MichaelFranz。系统只会初始化在清单文件中注册的组件。在Android中,只有通过Context.registerReceiver(receiver)
方法才能使用非注册的BroadcastReceiver
。 - Budius