Android推送通知如果通知栏

时间:2015-11-13 06:16:46

标签: android android-activity push-notification google-cloud-messaging

我正在开发一个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());

2 个答案:

答案 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和待处理的意向请求代码删除为随机数。现在它工作正常。