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
。它甚至在文档中这样说。
您好,我创建了一个通知意图,如下所示
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
。它甚至在文档中这样说。