Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android GCM通知不存在';当应用程序处于后台时,t重定向到预期活动_Android_Android Intent_Android Notifications_Android Pendingintent - Fatal编程技术网

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)