将捆绑包从服务传递到接收方返回空
值我想将捆绑数据从服务传递到接收器以立即更改 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"(