嗨,我已经创建了一个通知意图,如下所示
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);