What Firebase-cloud-messaging Intent-filter to use for a BroadcastReceiver?

柔情痞子 提交于 2019-12-10 10:16:14

问题


I am trying to get the Android BroadcastReceiver to run when a Firebase Cloud message notification is received by the Android system.

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();

   }
}

It is required in the AndroidManifest to specify receiver tags as such:

    <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>

As you can see in the Manifest above I've added:

<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>

to make sure the BroadcastReceiver fires when I plug cable to Android device. It works fine.

Therefore the issue lies with the:

<action android:name="com.google.firebase.MESSAGING_EVENT" />

Is this intent-filter action not recognized by the BroadcastReceiver? Is there another intent-filter action for Firebase messaging the BroadcastReceiver uses?


回答1:


The Android Intent messaging system processes Intents in three "channels": Activities, Services and BroadcastReceivers. The methods for publishing an Intent indicate the channel type: startActivity(), startService() and sendBroadcast(). An intent published with startService() will only match the intent filter of a Service. It is not tested against Activities and BroadcastReceivers.

Because action com.google.firebase.MESSAGING_EVENT is normally received by a Service derived from FirebaseMessagingService, it must be the case that the action is published in the Service channel. You will not be able to receive it with a BroadcastReceiver.



来源:https://stackoverflow.com/questions/44286497/what-firebase-cloud-messaging-intent-filter-to-use-for-a-broadcastreceiver

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!