Android 当应用程序处于后台时,GCM 通知不会重定向到预期 activity

Android GCM notification doesn't redirects to intended activity when app is in background

您好,我创建了一个通知意图,如下所示

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK );
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
        .setSmallIcon(getNotificationIcon())
        .setContentTitle(title)
        .setContentText(text)
        .setAutoCancel(true)
        .setSound(defaultSoundUri)
        .setContentIntent(pendingIntent);


int notification_id = (int) System.currentTimeMillis();
notificationManager.notify(notification_id, notificationBuilder.build());

如果应用程序关闭,一切都会正常运行。但是,如果应用程序在后台 运行,它只会从后台弹出上次打开的 activity 到前台。我想转到数据中收到的确切页面。 有人帮忙,我尝试了很多 FLAGS.

的组合

而不是这个

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK );

按照你的意图试试这个

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

FLAG_ACTIVITY_SINGLE_TOP 如果设置了这个标志,如果 activity 已经是 运行 在历史堆栈的顶部,则不会启动它。

试试这个解决方法

PendingIntent.getActivity(context, 0, notificationIntent, Intent.FLAG_ACTIVITY_NEW_TASK);

而不是

PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

AS @rahul 指出,如果您将 PendingIntent.FLAG_UPDATE_CURRENT 更改为 Intent.FLAG_NEW_ACTIVITY_TASK,它会按我的要求工作,但我发现的一个问题是,如果您在通知栏中有多个通知,则只有一个操作会工作。当点击剩下的那些时,它只会从那里清除,没有任何动作会起作用。以下是正确的解决方案 -

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP );
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                        .setSmallIcon(getNotificationIcon())
                        .setContentTitle(title)
                        .setContentText(text)
                        .setAutoCancel(true)
                        .setSound(defaultSoundUri)
                        .setContentIntent(pendingIntent);

为清除现有任务和开始新任务添加标志。

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); 
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);

如果您想使用 Intent.FLAG_ACTIVITY_CLEAR_TASK,您 还必须使用 Intent.FLAG_ACTIVITY_NEW_TASK。它甚至在文档中这样说。