什么Firebase-cloud-messaging Intent-filter用于BroadcastReceiver?

时间:2017-05-31 13:44:36

标签: android firebase broadcastreceiver firebase-cloud-messaging

我正试图在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操作?

1 个答案:

答案 0 :(得分:5)

Android Intent消息传递系统处理三个&#34;频道&#34;:活动,服务和BroadcastReceivers中的意图。 publishing an Intent的方法表示渠道类型:startActivity()startService()sendBroadcast()。使用startService()发布的意图仅与服务的意图过滤器匹配。它未针对Activities和BroadcastReceivers进行测试。

由于操作com.google.firebase.MESSAGING_EVENT通常由从FirebaseMessagingService派生的服务接收,因此必须是在服务渠道中发布操作的情况。您将无法使用BroadcastReceiver接收它。