Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 通知将相互覆盖_Android_Android Intent_Android Notifications_Android Notification Bar - Fatal编程技术网

Android 通知将相互覆盖

Android 通知将相互覆盖,android,android-intent,android-notifications,android-notification-bar,Android,Android Intent,Android Notifications,Android Notification Bar,我发送不同的通知。但是,当您单击其中任何一个时,我会得到发送到上次通知的数据。如何修复它?我需要注意每个存储它们的数据,而新的通知不会替换它们。我使用一个标志pendingent.flag\u UPDATE\u CURRENT,但我也使用左边的所有标志 private void generateNotification(Context context, String title, String message,int groupid,Intent data) { Notific

我发送不同的通知。但是,当您单击其中任何一个时,我会得到发送到上次通知的数据。如何修复它?我需要注意每个存储它们的数据,而新的通知不会替换它们。我使用一个标志
pendingent.flag\u UPDATE\u CURRENT
,但我也使用左边的所有标志

private void generateNotification(Context context, String title, String message,int groupid,Intent data) {

        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
        Intent intent = new Intent(context,MyActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                | Intent.FLAG_ACTIVITY_SINGLE_TOP);

        if (groupid==1){
            intent.putExtra("guest",data.getStringExtra("guest"));
            intent.putExtra("hotel",data.getStringExtra("hotel"));
            intent.putExtra("room",data.getStringExtra("room"));
        }
        if (groupid==5){
            intent.putExtra("hotel",data.getStringExtra("hotel"));
        }
        if (groupid==4){
            intent.putExtra("hotel",data.getStringExtra("hotel"));
            intent.putExtra("guest",data.getStringExtra("guest"));
        }

        intent.putExtra("group_id",groupid);
        Log.d("mylogout","group_id: "+groupid);
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

        Notification notification   = new NotificationCompat.Builder(context)
                .setContentIntent(pendingIntent)
                .setSmallIcon(R.drawable.ic_stat_gcm)
                .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_stat_gcm))
                .setTicker("Новое сообщение")
                .setWhen(System.currentTimeMillis())
                .setAutoCancel(true)
                .setContentTitle(title)
                .setContentText(message)
                .build();
        notificationManager.notify(ID_NITIF++, notification);
    }

诀窍是为每个不同的通知在pendingent上添加不同的
requestCode

文件是:

公共静态PendingEvent getActivity(上下文上下文,int requestCode,意图,int标志)

系统使用它来比较挂起的内容,如果您将相同的代码传递给不同的请求,它会认为它是相同的,并且不会更新它。要修复此问题,请为每个不同的通知添加不同的requestCode

我通常如何确保所有通知都得到良好更新:

//Use the hashcode of current timestamp mixed with some string to make it unique 
int requestCode = ("someString" + System.currentTimeMillis()).hashCode();

//Also add it to the intent, to make sure system sees it as different/modified
intent.putExtra("randomRequestCode", requestCode);

//Add the requestCode to the PendingIntent
PendingIntent pendingIntent = PendingIntent.getActivity(context, requestCode , intent, PendingIntent.FLAG_UPDATE_CURRENT);

ID_NITIF应该是静态字段,而不是最终字段。“此通知的标识符在您的应用程序中是唯一的。”我认为您应该尝试使用
FLAG\u ONE\u SHOT
<代码>标记\u更新\u当前覆盖数据。我找到了解决办法。一个星期以来,没有人能帮上忙。要在intent.setAction(“some”)中添加操作的每个通知中存储的数据;为什么建议将时间戳与字符串混合?时间戳是否已经唯一,“.hashCode()”将时间戳作为int返回?感谢您提供的任何见解。此外,如果我使用PendingEvent向广播接收器发送消息,是否需要使用Bundle extras=intent.getExtras()和extras.getInt(“key”)获取putExtra(“随机请求代码”)?或者我不需要额外的钱,只是为了让PendingEvent诱使操作系统认为它是独一无二的,所以每次都会创建一个独一无二的PendingEvent?