我试图让 Android BroadcastReceiver 在 Android 系统收到 Firebase Cloud 消息通知时运行。
public class MyBroadcastReceiver extends BroadcastReceiver {
private static final String TAG = "MyBroadcastReceiver";
@Override
public void onReceive(final Context context, Intent intent) {
Toast.makeText(context, "EVENT OCCURED", Toast.LENGTH_LONG).show();
}
}
在 AndroidManifest 中需要这样指定接收者标签:
<receiver
android:name=".MyBroadcastReceiver" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</receiver>
如您在上面的 list 中所见,我添加了:
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
确保当我将电缆插入 Android 设备时 BroadcastReceiver 触发。它工作正常。
因此问题在于:
<action android:name="com.google.firebase.MESSAGING_EVENT" />
BroadcastReceiver 是否无法识别此 intent-filter 操作? BroadcastReceiver 使用的 Firebase 消息传递是否有另一个 Intent 过滤器操作?
最佳答案
Android Intent 消息传递系统在三个“ channel ”中处理 Intent:Activity、Services 和 BroadcastReceivers。 publishing an Intent 的方法指示 channel 类型:startActivity()
、startService()
和 sendBroadcast()
。使用 startService()
发布的 Intent 将仅匹配服务的 Intent 过滤器。它没有针对 Activity 和 BroadcastReceivers 进行测试。
因为操作 com.google.firebase.MESSAGING_EVENT
通常由派生自 FirebaseMessagingService
的服务接收,所以操作必须是在服务 channel 中发布的情况.您将无法使用 BroadcastReceiver 接收它。
关于android - 什么 Firebase-cloud-messaging Intent-filter 用于 BroadcastReceiver?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44286497/