所以我在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);
在大多数情况下,这样做很好。但有一种情况是它不起作用。所以:
设备:三星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