将bundle从服务传递到接收方返回 null



将捆绑包从服务传递到接收方返回空

我想将捆绑数据从服务传递到接收器以立即更改 UI 数据

我将数据包作为哈希图键传递,并在活动类中得到相同的内容,但总是得到空 我只是在代码中注册注册接收器而不是在清单中

主要活动

BroadcastReceiver receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            try {
                if (intent != null) {
                    Bundle extras = intent.getBundleExtra("hashmap");
                    Toast.makeText(context, extras + "  " + intent.getBundleExtra("hashmap"), Toast.LENGTH_SHORT).show();

                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    };

    @Override
    protected void onResume() {
        super.onResume();
        try {
            LocalBroadcastManager.getInstance(this).registerReceiver(receiver, new IntentFilter(FIRMessagingService.REQUEST_ACCEPT));
        } catch (Exception e) {
            e.printStackTrace();
        }
       /* try {
            registerReceiver(receiver, new IntentFilter(FCMActivity.NEW_NOTIFICATION));
        } catch (Exception e) {
            e.printStackTrace();
        }*/
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        try {
            LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver);

        } catch (Exception e) {
        }
        /*try {
            unregisterReceiver(receiver);
        } catch (Exception e) {
            e.printStackTrace();
        }*/
    }

服务(火力基地(

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    super.onMessageReceived(remoteMessage);
    Log.e("Msg", remoteMessage.getData().size() + "");
    //sendNotification(remoteMessage.getData());
    try {
        LocalBroadcastManager broadcaster = LocalBroadcastManager.getInstance(getBaseContext());
        HashMap<String, String> data = new HashMap<>();
        Bundle msg = new Bundle();
        for (String key : data.keySet()) {
            Log.e(key, data.get(key));
            msg.putString(key, data.get(key));
        }
        Intent intent = new Intent(REQUEST_ACCEPT);
        intent.setAction(REQUEST_ACCEPT);
        intent.putExtra("hashmap", msg);
        broadcaster.sendBroadcast(intent);

    } catch (Exception e) {
        Log.e("error" + "receiver", e.toString());
    }
Map<String, String> data = remoteMessage.getData();

    Bundle msg = new Bundle();
    for (String key : data.keySet()) {
        Log.e(key, data.get(key));
        msg.putString(key, data.get(key));
    }

这是因为您刚刚初始化了它,但永远不要将数据传递给 map 对象。 所以地图总是空的。尝试以下代码

 Map<String, String> data = remoteMessage.getData();

        Bundle msg = new Bundle();
        for (String key : data.keySet()) {
            Log.e(key, data.get(key));
            msg.putString(key, data.get(key));
        }

这是因为您的哈希图数据为空。您正在创建 HasMap 的新对象并尝试从中获取实际上是空的值。

HashMap<String, String> data = new HashMap<>();
尝试使用

您在onMessageReceived中添加的一些键(应保存在R.strings中(而不是intent.getBundleExtras("hashmap"(

最新更新