第二个待处理意图(具有唯一请求代码)不会打开活动

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第二个待处理意图(具有唯一请求代码)不会打开活动相关的知识,希望对你有一定的参考价值。

所以我在GcmListenerService中收到通知并尝试像这样显示:

private void showNotification(String msg, String messageId, String patternIn) {

    NotificationCompat.Builder builder =
            new NotificationCompat.Builder(this)
                    .setSmallIcon(getNotificationIcon())
                    .setAutoCancel(true)
                    .setContentTitle(getString(R.string.app_name))
                    .setStyle(new NotificationCompat.BigTextStyle().bigText(msg))
                    .setSound(Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.cha_ching))
                    .setContentText(msg);

    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
    int pushId = sharedPreferences.getInt(KEY_UNIQUE_PUSH_ID, 1);
    pushId++;
    sharedPreferences.edit().putInt(KEY_UNIQUE_PUSH_ID, pushId).apply();

    Intent resultIntent = new Intent(this, SplashActivity.class);
    resultIntent.putExtra(PARAM_PUSH_MESSAGE_ID, messageId);
    resultIntent.putExtra(PARAM_PUSH_PATTERN_ID, patternIn);
    resultIntent.putExtra(PARAM_PUSH_ID, pushId);

    PendingIntent resultPendingIntent =
            PendingIntent.getActivity(
                    this,
                    pushId,
                    resultIntent,
                    PendingIntent.FLAG_UPDATE_CURRENT
            );

    builder.setContentIntent(resultPendingIntent);
    NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

    Notification notification = builder.build();
    notificationManager.notify(pushId, notification);

在大多数情况下,这样做很好。但有一种情况是它不起作用。所以:

  1. 杀死应用程序
  2. 发送2个通知
  3. 点击第一个 - >它将打开活动
  4. 点击第二个 - >它不会打开活动< - 这是一个问题..

设备:三星Galaxy S5 Android 6.0.1

非常感谢任何帮助:)

答案

在您描述的情况下,打开第一个Notification将创建一个新任务(因为应用程序未运行),并启动SplashActivity进入该任务。当你现在点击第二个Notification时,它只会使现有任务前进,并且不会启动另一个SplashActivity实例。这是启动Activity时的标准行为,Activity是任务的“根”Notification

为了得到你想要的行为,你应该让NotificationActivity发射一个SplashActivity(这不是你的NotificationActivity.onCreate())。在SplashActivity,你可以发射你的Intent并将finish()传递给它。然后在onCreate()中调用NotificationActivity以确保你的resultIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); 消失。

另一答案

通过添加此行修复:

qazxswpoi

以上是关于第二个待处理意图(具有唯一请求代码)不会打开活动的主要内容,如果未能解决你的问题,请参考以下文章

即使重新创建活动,也不会清除待处理的意图额外内容

更改意图时 Android Studio 崩溃

多个意图打开错误活动的待处理意图

通过单击第一个活动中的不同按钮(图像名称)在第二个活动中打开不同的图像

具有相同意图的推送通知打开 Activity

应用程序被杀时,一个通知多个意图