Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cómo mostrar varias notificaciones en android

Estoy recibiendo solo una notificación y si hay otra notificación viene, reemplaza la anterior y aquí está mi código

private static void generateNotification(Context context, String message, String key) { int icon = R.drawable.ic_launcher; long when = System.currentTimeMillis(); NotificationManager notificationManager = (NotificationManager) context .getSystemService(Context.NOTIFICATION_SERVICE); Notification notification = new Notification(icon, message, when); String title = context.getString(R.string.app_name); Intent notificationIntent = new Intent(context, FragmentOpenActivity.class); notificationIntent.putExtra(key, key); // set intent so it does not start a new activity notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent, 0); notification.setLatestEventInfo(context, title, message, intent); notification.flags |= Notification.FLAG_AUTO_CANCEL; notification.defaults |= Notification.DEFAULT_SOUND; // notification.sound = Uri.parse("android.resource://" + // context.getPackageName() + "your_sound_file_name.mp3"); notification.defaults |= Notification.DEFAULT_VIBRATE; notificationManager.notify(0, notification); } 

12 Solutions collect form web for “Cómo mostrar varias notificaciones en android”

Acaba de reemplazar su línea con esta

  notificationManager.notify(Unique_Integer_Number, notification); 

Espero que te ayude.

Simple notification_id necesita ser cambiable.

Simplemente cree un número aleatorio para notification_id.

  Random random = new Random(); int m = random.nextInt(9999 - 1000) + 1000; 

O puede utilizar este método para crear un número aleatorio tal como lo dice tieorange (esto nunca se repetirá):

  int m = (int) ((new Date().getTime() / 1000L) % Integer.MAX_VALUE); 

Y reemplazar esta línea para agregar el parámetro de id de notificación para generar un número aleatorio

  notificationManager.notify(m, notification); 

El uso de las preferencias compartidas funcionó para mí

 SharedPreferences prefs = getSharedPreferences(Activity.class.getSimpleName(), Context.MODE_PRIVATE); int notificationNumber = prefs.getInt("notificationNumber", 0); ... notificationManager.notify(notificationNumber , notification); SharedPreferences.Editor editor = prefs.edit(); notificationNumber++; editor.putInt("notificationNumber", notificationNumber); editor.commit(); 

Supongo que esto ayudará a alguien.
En debajo del código "not_nu" es un int aleatorio .. PendingIntent y Notificación tienen el mismo ID .. de modo que en cada clic de la notificación el intento dirigirá a la actividad diferente.

 private void sendNotification(String message,String title,JSONObject extras) throws JSONException { String id = extras.getString("actionParam"); Log.e("gcm","id = "+id); Intent intent = new Intent(this, OrderDetailActivty.class); intent.putExtra("id", id); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); final int not_nu=generateRandom(); PendingIntent pendingIntent = PendingIntent.getActivity(this, not_nu /* Request code */, intent, PendingIntent.FLAG_ONE_SHOT); Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.mipmap.ic_cart_red) .setContentTitle(title) .setContentText(message) .setAutoCancel(true) .setSound(defaultSoundUri) .setContentIntent(pendingIntent); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(not_nu /* ID of notification */, notificationBuilder.build()); } public int generateRandom(){ Random random = new Random(); return random.nextInt(9999 - 1000) + 1000; } 

En el lugar de uniqueIntNo poner un número entero único como este:

 mNotificationManager.notify(uniqueIntNo, builder.build()); 

Reemplace su línea con esto.

 notificationManager.notify((int) ((new Date().getTime() / 1000L) % Integer.MAX_VALUE), notification); 

Debe agregar un ID exclusivo a cada una de las notificaciones para que no se combinen entre sí. Puede utilizar este enlace para su referencia:

https://github.com/sanathe06/AndroidGuide/tree/master/ExampleCompatNotificationBuilder

He resuelto mi problema como este …

 /** * Issues a notification to inform the user that server has sent a message. */ private static void generateNotification(Context context, String message, String keys, String msgId, String branchId) { int icon = R.drawable.ic_launcher; long when = System.currentTimeMillis(); NotificationCompat.Builder nBuilder; Uri alarmSound = RingtoneManager .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); nBuilder = new NotificationCompat.Builder(context) .setSmallIcon(R.drawable.ic_launcher) .setContentTitle("Smart Share - " + keys) .setLights(Color.BLUE, 500, 500).setContentText(message) .setAutoCancel(true).setTicker("Notification from smartshare") .setVibrate(new long[] { 100, 250, 100, 250, 100, 250 }) .setSound(alarmSound); String consumerid = null; Integer position = null; Intent resultIntent = null; if (consumerid != null) { if (msgId != null && !msgId.equalsIgnoreCase("")) { if (key != null && key.equalsIgnoreCase("Yo! Matter")) { ViewYoDataBase db_yo = new ViewYoDataBase(context); position = db_yo.getPosition(msgId); if (position != null) { resultIntent = new Intent(context, YoDetailActivity.class); resultIntent.putExtra("id", Integer.parseInt(msgId)); resultIntent.putExtra("position", position); resultIntent.putExtra("notRefresh", "notRefresh"); } else { resultIntent = new Intent(context, FragmentChangeActivity.class); resultIntent.putExtra(key, key); } } else if (key != null && key.equalsIgnoreCase("Message")) { resultIntent = new Intent(context, FragmentChangeActivity.class); resultIntent.putExtra(key, key); }. . . . . . } else { resultIntent = new Intent(context, FragmentChangeActivity.class); resultIntent.putExtra(key, key); } } else { resultIntent = new Intent(context, MainLoginSignUpActivity.class); } PendingIntent resultPendingIntent = PendingIntent.getActivity(context, notify_no, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT); if (notify_no < 9) { notify_no = notify_no + 1; } else { notify_no = 0; } nBuilder.setContentIntent(resultPendingIntent); NotificationManager nNotifyMgr = (NotificationManager) context .getSystemService(context.NOTIFICATION_SERVICE); nNotifyMgr.notify(notify_no + 2, nBuilder.build()); } 

Otra forma de hacerlo es tomar la fecha actual convertirlo en largo sólo tomar los últimos 4 dígitos. Existe una alta probabilidad de que el número sea único.

  long time = new Date().getTime(); String tmpStr = String.valueOf(time); String last4Str = tmpStr.substring(tmpStr.length() -5); int notificationId = Integer.valueOf(last4Str); 

A continuación se muestra el código para el ID de notificación único de paso:

 //"CommonUtilities.getValudeFromOreference" is the method created by me to get value from savedPreferences. String notificationId = CommonUtilities.getValueFromPreference(context, Global.NOTIFICATION_ID, "0"); int notificationIdinInt = Integer.parseInt(notificationId); notificationManager.notify(notificationIdinInt, notification); // will increment notification id for uniqueness notificationIdinInt = notificationIdinInt + 1; CommonUtilities.saveValueToPreference(context, Global.NOTIFICATION_ID, notificationIdinInt + ""); //Above "CommonUtilities.saveValueToPreference" is the method created by me to save new value in savePreferences. 

Restablecer notificationId en savedPreferences en el rango específico como lo he hecho en 1000. por lo que no va a crear ningún problema en el futuro. Déjeme saber si usted necesita más información de detalle o cualquier pregunta. 🙂

El problema es con su notificationId . Piense como un índice de matriz. Cada vez que actualiza su notificación, la notificationId es el lugar que se necesita para almacenar el valor. Como no estás incrementando tu valor int (en este caso, tu notificationId ), esto siempre reemplaza al anterior. La mejor solución que supongo es incrementarla justo después de actualizar una notificación. Y si desea mantenerlo persistente, puede almacenar el valor de su notificationId en sharedPreferences . Siempre que vuelvas, puedes simplemente agarrar el último valor entero ( notificationId almacenado en sharedPreferences ) y usarlo.

Utilice el método siguiente en su código.

Llamada al método: –

 notificationManager.notify(getCurrentNotificationId(getApplicationContext()), notification); 

Método:-

  *Returns a unique notification id. */ public static int getCurrentNotificationId(Context iContext){ NOTIFICATION_ID_UPPER_LIMIT = 30000; // Arbitrary number. NOTIFICATION_ID_LOWER_LIMIT = 0; SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(iContext); int previousTokenId = sharedPreferences.getInt("currentNotificationTokenId", 0); int currentTokenId = previousTokenId+1; SharedPreferences.Editor editor = sharedPreferences.edit(); if(currentTokenId<NOTIFICATION_ID_UPPER_LIMIT) { editor.putInt("currentNotificationTokenId", currentTokenId); // } }else{ //If reaches the limit reset to lower limit.. editor.putInt("currentNotificationTokenId", NOTIFICATION_ID_LOWER_LIMIT); } editor.commit(); return currentTokenId; } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.