Android:我的部分临时演员在未决意图中丢失了

Android: Part of my extras are getting lost in pending intent

我是第一次制作 Android 应用程序,但遇到了这个问题。 当用户 A 向另一个用户 B 发送好友请求时,用户 B 会收到通知。我希望当用户 B 单击要重定向到用户 A 个人资料的通知时。

主要 activity(应用程序中的主页)根据用户的来源打开不同的片段。用户配置文件就是这样一个片段。

这就是我从演示者 class 发送主要 Activity 通知的方式。

Intent notificationIntent = new Intent(activity.getApplicationContext(), MainActivity.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

Bundle extras = new Bundle();
extras.putString("name" ,this.friendRequestFromUserName.toString());
extras.putString("email", this.friendRequestFromUserEmail);
extras.putString("notification", "notificationFriendRequest");

notificationIntent.putExtras(extras);

System.out.println("PUTTING EXTRA");
System.out.println(notificationIntent.getExtras().toString());
// output here is:
//Bundle[{name=The Lion King, email=mufasa@lionking.com, notification=notificationFriendRequest}]

NotificationCompat.Builder builder = new NotificationCompat.Builder(activity)
    .setSmallIcon(R.drawable.ic_notification)
    .setContentTitle("New friend!")
    .setContentText(this.friendRequestFromUserName + " wants to be friends.")
    .setAutoCancel(true)
    .setOnlyAlertOnce(true)
    .setOngoing(false)
    .setContentIntent(PendingIntent.getActivity(activity.getApplicationContext(), 0, notificationIntent, 0));

builder.setOngoing(false);
builder.setAutoCancel(true);

Notification not = builder.build();
not.flags = Notification.FLAG_AUTO_CANCEL;
NotificationManager manager = (NotificationManager)this.activity.getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
        manager.notify(123, not);

然而,在主要 activity 中,当用户点击通知时,只有 Bundle 的一部分是 "arriving"。 以下是我尝试获取额外内容的方法:

    extraName = intent.getStringExtra("name");
    extraMail = intent.getStringExtra("email");
    extra = intent.getStringExtra("notification");

    System.out.println(intent.getExtras().toString());
    //Bundle[{notification=notificationFriendRequest}]

我也试过将数组作为额外的,结果相同。由于我的部分额外费用已到,但其他部分未到,而且我找不到类似的主题和问题,我决定询问是否有人可以提供帮助或解释为什么或如何发生这种情况。谢谢。

您获取值的方式有误。当您在 Intent 中将所有内容作为一个包传递时,首先您必须首先从这样的意图中获取 Bundle 对象

Bundle extras = getIntent().getExtras(); 然后从 bundle object

中获取其他字符串

尝试获取 bundle 对象,然后像这样获取值,希望对您有所帮助。

@Override
protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);

     try{
          Bundle data= this.getIntent().getExtras();
          extraName = data.getString("name");
          extraMail = data.getString("email");
          extra = data.getString("notification");
     }catch(Exception e){
          e.printStackTrace();
     }
}

因此,正如 pskink 所建议的那样,我添加了唯一的 requestCode 和 PendingIntent.FLAG_UPDATE_CURRENT 标志并解决了它。

.setContentIntent(PendingIntent.getActivity(activity.getApplicationContext(), Math.abs(generator.nextInt()), notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT));

因为我不知道如何将建议标记为答案,因为这是我在这里的第一个问题,所以我自己回答。再次感谢你,pskink!