我正试图在Android系统收到Firebase Cloud消息通知时运行Android BroadcastReceiver。
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>
正如您在上面的清单中所看到的,我已添加:
<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-filter操作?
答案 0 :(得分:5)
Android Intent消息传递系统处理三个&#34;频道&#34;:活动,服务和BroadcastReceivers中的意图。 publishing an Intent的方法表示渠道类型:startActivity()
,startService()
和sendBroadcast()
。使用startService()
发布的意图仅与服务的意图过滤器匹配。它未针对Activities和BroadcastReceivers进行测试。
由于操作com.google.firebase.MESSAGING_EVENT
通常由从FirebaseMessagingService
派生的服务接收,因此必须是在服务渠道中发布操作的情况。您将无法使用BroadcastReceiver接收它。