我试图在Android系统收到Firebase Cloud Message Notification时将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使用了另一个意图过滤操作?
Android意图消息系统在三个"渠道"中处理意图:活动,服务和广播界。发布意图的方法表示通道类型:startActivity()
,startService()
和sendBroadcast()
。使用startService()
发布的意图只能匹配服务的意图过滤器。它没有针对活动和广播剂进行测试。
由于com.google.firebase.MESSAGING_EVENT
通常是由FirebaseMessagingService
派生的服务收到的,因此必须在服务频道中发布操作。您将无法使用广播员接收它。