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

问题描述 投票:0回答:2

所以我在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

非常感谢任何帮助:)

android push-notification notifications android-pendingintent
2个回答
0
投票

在您描述的情况下,打开第一个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); 消失。


0
投票

通过添加此行修复:

qazxswpoi
© www.soinside.com 2019 - 2024. All rights reserved.