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



嗨,我已经创建了一个通知意图,如下所示

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

如果关闭该应用程序,则一切正常。但是,如果应用程序在后台运行,它只是弹出了最后一次从背景到前景的活动。我想转到数据中收到的精确页面。有人帮助,我尝试了许多FLAGS的组合。

只是围绕此操作尝试

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

而不是

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

而不是此

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK );

在您的意图中尝试一下

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

flag_activity_single_top 如果设置了此标志,则如果已经在历史记录堆栈的顶部运行的活动将不会启动活动。

@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.FLAG_ACTIVITY_CLEAR_TASK,则也必须使用 Intent.FLAG_ACTIVITY_NEW_TASK。它甚至在文档中说了这一点。

为清晰的现有任务添加标志并启动新任务。

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

最新更新