我正在开发一个Android应用程序,我也实现了GCM推送通知,并且每个通知ID都不同,问题是当我有n个推送通知而应用程序不在后台时,当我第一次点击通知时它将打开活动。然后我再次从后台清除了应用程序实例,并点击了另一个推送通知,它将无法打开应用程序。
Intent intent = new Intent(this, MainActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(MainActivity.class);
stackBuilder.addNextIntent(intent);
long[] vibrate = {0, 100, 200, 300};
Uri notification = RingtoneManager
.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
PendingIntent contentIntent = stackBuilder.getPendingIntent(0,
PendingIntent.FLAG_UPDATE_CURRENT
| PendingIntent.FLAG_ONE_SHOT);
Bitmap largIcon = BitmapFactory.decodeResource(this.getResources(),
R.mipmap.ic_launcher);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
this).setSmallIcon(R.mipmap.small_icon_notification)
.setContentTitle(getResources().getString(R.string.app_name))
.setLargeIcon(largIcon)
.setSound(notification)
.setStyle(new NotificationCompat.BigTextStyle().bigText(msg))
.setContentText(msg). setSound(notification)
.setStyle((new NotificationCompat.BigTextStyle()).bigText(msg)) .setAutoCancel(true);
mBuilder.setVibrate(vibrate);
mBuilder.setContentIntent(contentIntent);
mNotificationManager.notify((int) System.currentTimeMillis(), mBuilder.build());
答案 0 :(得分:1)
在行中
PendingIntent contentIntent = stackBuilder.getPendingIntent(0,
PendingIntent.FLAG_UPDATE_CURRENT
| PendingIntent.FLAG_ONE_SHOT);
您始终对PendingIntent
使用相同的请求代码。
具有相同请求代码(第一个参数)和相同意图的PendingIntent
的所有实例(可能甚至不重要,我还没有测试)是相同的待定意图,无论你添加什么额外的东西意图。使它们不同的唯一方法是使用不同的请求代码。
特别是如果您使用FLAG_ONE_SHOT
,"Flag indicating that this PendingIntent can be used only once"
答案 1 :(得分:0)
我将PendingIntent.FLAG_ONE_SHOT
和待处理的意向请求代码删除为随机数。现在它工作正常。