当应用在后台时,Android GCM通知不会重定向到预期的活动

时间:2016-11-29 06:13:15

标签: android android-intent android-notifications android-pendingintent

您好我已创建通知意图如下

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());

如果应用关闭,一切都很完美。但是如果app在后台运行,它只会将上次打开的活动从后台弹出到前台。我想转到数据中收到的确切页面。 有人帮忙,我尝试了FLAGS的许多组合。

5 个答案:

答案 0 :(得分:3)

试一试这个

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

而不是

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

答案 1 :(得分:0)

而不是这个

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK );

在你的意图中尝试这个

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

<强> FLAG_ACTIVITY_SINGLE_TOP 如果设置了此标志,则如果活动已在历史堆栈的顶部运行,则不会启动该活动。

答案 2 :(得分:0)

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);

答案 3 :(得分:0)

为清除现有任务添加标记并启动新任务。

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

答案 4 :(得分:0)

如果您想使用Intent.FLAG_ACTIVITY_CLEAR_TASK也必须使用 Intent.FLAG_ACTIVITY_NEW_TASK。它甚至在文档中说明了这一点。