Android 推送通知无法正常工作

Android 推送通知无法正常工作,android,push-notification,android-pendingintent,Android,Push Notification,Android Pendingintent,我已经在Android上创建了聊天应用程序 在这种情况下,推送通知中会出现问题 问题是: 当用户向用户X发送消息时,X获得推送 在用户B向用户X发送消息之后,X获得第二次推送 然后用户X单击推送用户A聊天屏幕不会打开,但单击推送用户B聊天屏幕会打开 如何解决这个问题 PendingIntent contentIntent; UserSessionManager userSession = new UserSessionManager(context); if (typ

我已经在Android上创建了聊天应用程序

在这种情况下,推送通知中会出现问题

问题是:

  • 当用户向用户X发送消息时,X获得推送
  • 在用户B向用户X发送消息之后,X获得第二次推送
然后用户X单击推送用户A聊天屏幕不会打开,但单击推送用户B聊天屏幕会打开

如何解决这个问题

    PendingIntent contentIntent;
    UserSessionManager userSession = new UserSessionManager(context);
    if (type.equals("2"))
    {
        if (userSession.getUserSession() != null = PendingIntent.getActivity(
                    context,
                    0,
                    new Intent(context, ChatActivity.class)
                            .putExtra("to_id", from_id)
                            .putExtra("username", username)
                            .putExtra("to_avt", to_avt)
                            .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                                            | Intent.FLAG_ACTIVITY_SINGLE_TOP),
                    PendingIntent.FLAG_UPDATE_CURRENT);
        }
        else
        {
            contentIntent = PendingIntent.getActivity(context, 0, new Intent(context,
                    SplashActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK),
                    PendingIntent.FLAG_UPDATE_CURRENT);
        }

    }

    mBuilder.setContentIntent(contentIntent);
    mNotificationManager.notify(Integer.parseInt(from_id), mBuilder.build());
谢谢

您的问题在于:

contentIntent = PendingIntent.getActivity(
                context,
                0,
                new Intent(context, ChatActivity.class)
                        .putExtra("to_id", from_id)
                        .putExtra("username", username)
                        .putExtra("to_avt", to_avt)
                        .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                                        | Intent.FLAG_ACTIVITY_SINGLE_TOP),
                PendingIntent.FLAG_UPDATE_CURRENT);
此代码每次都会覆盖
pendingent
。因此,您将只有一个
pendingent
(包含最新的一组“额外内容”)

您需要的是确保为每个不同的聊天会话生成不同的
pendingent
。要使
pendingent
唯一,可以生成唯一的“意图动作”或使用唯一的
requestCode
参数

如果我们假设每个会话的
from_id
是唯一的整数,那么您可以将其用作
requestCode
,如下所示:

contentIntent = PendingIntent.getActivity(
                context,
                from_id, // unique requestCode
                new Intent(context, ChatActivity.class)
                        .putExtra("to_id", from_id)
                        .putExtra("username", username)
                        .putExtra("to_avt", to_avt)
                        .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                                        | Intent.FLAG_ACTIVITY_SINGLE_TOP),
                PendingIntent.FLAG_UPDATE_CURRENT);
contentIntent = PendingIntent.getActivity(
                context,
                0,
                new Intent(context, ChatActivity.class)
                        .setAction(username) // Unique ACTION
                        .putExtra("to_id", from_id)
                        .putExtra("username", username)
                        .putExtra("to_avt", to_avt)
                        .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                                        | Intent.FLAG_ACTIVITY_SINGLE_TOP),
                PendingIntent.FLAG_UPDATE_CURRENT);
或者,如果
username
是一个唯一的字符串,您可以将其用作“意图操作”,如下所示:

contentIntent = PendingIntent.getActivity(
                context,
                from_id, // unique requestCode
                new Intent(context, ChatActivity.class)
                        .putExtra("to_id", from_id)
                        .putExtra("username", username)
                        .putExtra("to_avt", to_avt)
                        .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                                        | Intent.FLAG_ACTIVITY_SINGLE_TOP),
                PendingIntent.FLAG_UPDATE_CURRENT);
contentIntent = PendingIntent.getActivity(
                context,
                0,
                new Intent(context, ChatActivity.class)
                        .setAction(username) // Unique ACTION
                        .putExtra("to_id", from_id)
                        .putExtra("username", username)
                        .putExtra("to_avt", to_avt)
                        .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                                        | Intent.FLAG_ACTIVITY_SINGLE_TOP),
                PendingIntent.FLAG_UPDATE_CURRENT);

这两种解决方案都将确保为每个会话生成一个单独的
pendingent

尝试添加此代码add flags Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK