Android GCM通知不存在';当应用程序处于后台时,t重定向到预期活动
嗨,我已经创建了一个通知意图,如下所示Android GCM通知不存在';当应用程序处于后台时,t重定向到预期活动,android,android-intent,android-notifications,android-pendingintent,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.T
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());
如果应用程序关闭,一切都会正常工作。但若应用程序在后台运行,它只会将最后打开的活动从后台弹出到前台。我想转到数据中接收到的确切页面。
有人帮忙,我尝试了许多组合的标志
而不是这个
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK );
试试你的意图
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
标记活动\u单个\u顶部
如果设置了此标志,则如果活动已在历史堆栈顶部运行,则不会启动该活动。而不是此标志
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK );
试试你的意图
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
标记活动\u单个\u顶部
如果设置了此标志,则如果活动已在历史堆栈的顶部运行,则不会启动该活动。只是解决方法,请尝试此操作
PendingIntent.getActivity(context, 0, notificationIntent, Intent.FLAG_ACTIVITY_NEW_TASK);
而不是
PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
只是一个工作,试试这个
PendingIntent.getActivity(context, 0, notificationIntent, Intent.FLAG_ACTIVITY_NEW_TASK);
而不是
PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
正如@rahul所指出的,如果您将
pendingent.FLAG\u UPDATE\u CURRENT
更改为Intent.FLAG\u NEW\u ACTIVITY\u 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);
正如@rahul所指出的,如果您将
pendingent.FLAG\u UPDATE\u CURRENT
更改为Intent.FLAG\u NEW\u ACTIVITY\u 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.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
如果要使用
Intent.FLAG\u ACTIVITY\u CLEAR\u TASK
,则还必须使用Intent.FLAG\u ACTIVITY\u NEW\u TASK
。它甚至在文档中这样说。如果你想使用意图。标记活动\u清除任务
你还必须使用意图。标记活动\u新任务
。它甚至在文档中这样说。不起作用。通过设置上述标志,将显示当前打开的活动。我想要的是,每当我点击通知时,无论应用程序是在后台还是前台,都能调用onCreate。L您是否在android清单中添加了android:exported=“true”的活动标记,该标记应该在点击通知后打开?不起作用。通过设置上述标志,将显示当前打开的活动。我想要的是,每当我点击通知时,无论应用程序是在后台还是前台,都会调用onCreate。L您是否在您的android清单中添加了android:exported=“true”,该活动标记应该在点击通知后打开?尝试此意图。setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);为要在通知单击时启动的活动添加清单代码。请发布清单尝试此Intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);为您希望在通知单击时开始的活动添加清单代码。请发布您的清单。但行中的Studio show警告必须位于以下位置或以上:PendingEvent……
您应将PendingEvent.FLAG_在Intent.FLAG_activity_NEW_任务的位置发送一次,因为此Intent标志不建议用于PendingIntent.getActivity方法。将Intent.FLAG\u ACTIVITY…
传递给对pendingent.getActivity()的调用
错误。此调用接受的是pendingent
标志,而不是Intent
标志。感谢insight@DavidWasser投票支持有用的提示。但是行中的Studio show警告必须启用或超过:pendingent……
您应该在Intent.FLAG\u位置通过pendingent.FLAG\u一次射击。FLAG\u活动\u新任务因为不建议PendingEvent.getActivity方法使用此Intent标志。将Intent.Flag_ACTIVITY_u…
传递给对PendingEvent.getActivity()的调用
错误。此调用接受的是pendingent
标志,而不是Intent
标志。感谢insight@DavidWasser对有用提示的投票FLAG\u ACTIVITY\u CLEAR\u TOP
如果指定FLAG\u ACTIVITY\u CLEAR\u TASK
FLAG\u ACTIVITY\u CLEAR\u TOP
则不相关且多余指定FLAG\u ACTIVITY\u CLEAR\u TASK
调用setFlags()
两次,这样会在第二次调用时覆盖标志。您将只得到FLAG\u ACTIVITY\u NEW\u TASK
集,这不是您想要的。请使用addFlags()
而不是setFlags())
或将两个标志都放在setFlags()的参数中,如下所示:setFlags(Intent.FLAG\u ACTIVITY\u CLEAR\u TOP\Intent.FLAG\u ACTIVITY\u NEW\u TASK)
调用setFlags()
这样做两次会在第二次调用中覆盖标志。您将只得到FLAG\u ACTIVITY\u NEW\u TASK
集,这不是您想要的。请使用addFlags()
而不是setFlags()
或将两个标志都放在setFlags()
的参数中,如下所示:setFlags()(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK)