samsung pantalla notificaciones mostrar desactivar como bloqueo activar android notifications android-notifications

pantalla - notificaciones push android firebase



Cómo mostrar notificaciones múltiples en Android (13)

A continuación se muestra el código para pasar ID de notificación única:

//"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.

Restablece notificationId en SavedPreferences en un rango específico como lo hice en 1000. por lo que no creará ningún problema en el futuro. Avíseme si necesita más información detallada o cualquier consulta. :)

Recibo solo una notificación y si aparece otra notificación, reemplaza a 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); }



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


El uso de Preferencias Compartidas me ha funcionado

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();


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

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


Otra forma de hacerlo es tomar la fecha actual convertirlo en largo simplemente tomar los últimos 4 dígitos. Hay 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);


Reemplaza tu línea con esto.

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


Simple notification_id necesita ser cambiable.

Solo crea un número aleatorio para notification_id.

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

o puede usar este método para crear números aleatorios según lo indicado por tieorange (esto nunca se repetirá):

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

y reemplace esta línea para agregar un parámetro para el ID de notificación para generar un número aleatorio

notificationManager.notify(m, notification);


Solucioné mi problema así ...

/** * 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()); }


Supongo que esto ayudará a alguien ...
en el código siguiente "not_nu" es una int aleatoria. PendingIntent y Notification tienen la misma ID ... por lo que en cada notificación, haga clic en el intento para dirigir a una 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; }


Un contador simple puede resolver su problema.

private Integer notificationId = 0; private Integer incrementNotificationId() { return notificationId++; } NotificationManager.notify(incrementNotificationId, notification);


Usa el siguiente método en tu 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; }


simplemente reemplace su línea con esto

notificationManager.notify(Unique_Integer_Number, notification);

Espero que te ayude.