BroadcastReceiver 意图从何而来?我该如何改变它?

where does the BroadcastReceiver intent come from? and how can I change it?

在我正在开发的应用程序中,只要用户收到一条消息,消息内容就会使用 BroadcastReceiver 传送到应用程序。我想为这个意图添加一个字段并获得一些额外的信息,只是不知道意图来自哪里。

这是广播及其 onReceive() 方法:

br = new BroadcastReceiver() {

        public void onReceive(Context context, Intent intent) {

            int task = intent.getIntExtra(PARAM_TASK, 0);
            int status = intent.getIntExtra(PARAM_STATUS, 0);

            int msgId = intent.getIntExtra("msgId", 0);
            long msgFromUserId = intent.getLongExtra("msgFromUserId", 0);
            int msgFromUserState = intent.getIntExtra("msgFromUserState", 0);
            int msgFromUserVerify = intent.getIntExtra("msgFromUserVerify", 0);
            String msgFromUserUsername = intent.getStringExtra("msgFromUserUsername");
            String msgFromUserFullname = intent.getStringExtra("msgFromUserFullname");
            String msgFromUserPhotoUrl = intent.getStringExtra("msgFromUserPhotoUrl");
            String msgMessage = intent.getStringExtra("msgMessage");
            String msgImgUrl = intent.getStringExtra("msgImgUrl");
            int msgCreateAt = intent.getIntExtra("msgCreateAt", 0);
            String msgDate = intent.getStringExtra("msgDate");
            String msgTimeAgo = intent.getStringExtra("msgTimeAgo");
            int msgTransactionValue = intent.getIntExtra("transValue",0);

            Chat1Item c = new Chat1Item();
            c.setId(msgId);
            c.setFromUserId(msgFromUserId);
            c.setFromUserState(msgFromUserState);
            c.setFromUserVerify(msgFromUserVerify);
            c.setFromUserUsername(msgFromUserUsername);
            c.setFromUserFullname(msgFromUserFullname);
            c.setFromUserPhotoUrl(msgFromUserPhotoUrl);
            c.setMessage(msgMessage);
            c.setImgUrl(msgImgUrl);
            c.setCreateAt(msgCreateAt);
            c.setDate(msgDate);
            c.setTimeAgo(msgTimeAgo);
            c.setTransactionValue(msgTransactionValue);

Log.e(LOG_TAG, "onReceive: task = " + task + ", status = " + status + " " + c.getMessage() + " " + Integer.toString(c.getId()));



            final Chat1Item lastItem = (Chat1Item) 
listView.getAdapter().getItem(listView.getAdapter().getCount() - 1);

            messagesCount = messagesCount + 1;

            chat1List.add(c);

            if (!visible) {

                try {

                    Uri notification = 
RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
                    Ringtone r = RingtoneManager.getRingtone(getActivity(), notification);
                    r.play();

                } catch (Exception e) {

                    e.printStackTrace();
                }
            }

            chatAdapter.notifyDataSetChanged();

            scrollListViewToBottom();



            getNextMessages();
        }

它还使用 IntentFilter 来注册 BroadcastReceiver:

    IntentFilter intFilt = new IntentFilter(BROADCAST_ACTION);
    getActivity().registerReceiver(br, intFilt);

还有这些是我的清单文件中的意图过滤器:

       <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>


        <service
            android:name="com.thetasocial.app.service.MyFcmListenerService">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
        </service>

        <service
            android:name="com.thetasocial.app.service.MyInstanceIDListenerService">
            <intent-filter>
                <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
            </intent-filter>
        </service>

        <service
            android:name="com.thetasocial.app.service.MyService"
            android:exported="false" />

给我一个开始的线索。提前致谢。

找到 sendBroadcast 文件或项目...您将在其中看到要由 BroadcastReciever 接收的广播意图和意图内容...

首先,这是本地广播 receiver.i。即,匿名 class,因此您无法在 manifest.xml 中找到该接收者。这个接收器必须注册和取消注册,这是强制性的,而且它也必须在那个特定的 activity (或)片段中完成,在那个注册(或)取消注册代码中我们可以找到广播意图过滤器名称。在您的情况下 BROADCAST_ACTION 是名称。尝试在整个项目中找到 BROADCAST_ACTION 的用法。要在整个项目中查找用法,如果您使用的是 Android,studio 意味着快捷方式是 ctrl+shift+F。您的广播意图如下所示,

 Intent intent = new Intent(BROADCAST_ACTION);

sendBroadcast(intent);

请注意,intent 过滤器名称只是一个字符串 BROADCAST_ACTION 应该是在某处声明的常量值。

希望这对您有所帮助:)