studio notification notificaciones notificacion name codigo basica app android notifications android-notifications android-8.0-oreo

notification - En Android 8.1 API 27, la notificación no se muestra



notification android channel id (4)

Además, no olvide vincular su channel_id a su generador de notificaciones. Después de atarlo, mi problema desapareció.

notificationBuilder.setChannelId(channelId)

o

NotificationCompat.Builder(Context context, String channelId)

Obtuve Toast en Android 8.1 API 27:

Advertencia del desarrollador para el paquete "my_package_name"
Error al publicar notificación el ...

Logcat incluye las siguientes cadenas:

Notificación: el uso de los tipos de flujo está en desuso para otras operaciones que no sean el control de volumen

W / Notificación: consulte la documentación de setSound () para saber qué usar en su lugar con android.media.AudioAttributes para calificar su caso de uso de reproducción

E / NotificationService: no se ha encontrado ningún canal para pkg = my_package_name

La información completa en Toast y en Logcat puede ayudar a localizar este problema.


He configurado la identificación del canal, pero la notificación aún no se muestra.

Finalmente encontré que mi problema es no invocar el método "setContentText ()".

¡Realmente me ayudó que mencionara "setters requeridos"!

Estos son los configuradores necesarios para la notificación en Android 8 Oreo API 26 y posterior:

builder.setContentTitle() // required .setSmallIcon() // required .setContentText() // required .setChannelId(id) // required for deprecated in API level >= 26 constructor .Builder(this)


La respuesta de Andy funciona, sin embargo, quería evitar dejar de usar Builder y seguir el Proyecto de inicio rápido de FireBase . Acabo de agregar el código antes de notificar al gerente.

String channelId = "default_channel_id"; String channelDescription = "Default Channel"; // Since android Oreo notification channel is needed. //Check if notification channel exists and if not create one if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { NotificationChannel notificationChannel = notificationManager.getNotificationChannel(channelId); if (notificationChannel == null) { int importance = NotificationManager.IMPORTANCE_HIGH; //Set the importance level notificationChannel = new NotificationChannel(channelId, channelDescription, importance); notificationChannel.setLightColor(Color.GREEN); //Set if it is necesssary notificationChannel.enableVibration(true); //Set if it is necesssary notificationManager.createNotificationChannel(notificationChannel); } } //notificationManager.notify as usual

Editar: eliminaron la verificación de existencia del canal del ejemplo, no estoy seguro de por qué.


Si obtiene este error, debe prestar atención a 2 artículos y ordenarlos:

  1. NotificationChannel mChannel = new NotificationChannel(id, name, importance);
  2. builder = new NotificationCompat.Builder(context, id);

También NotificationManager notifManager y NotificationChannel mChannel se crean solo una vez.

Hay configuradores necesarios para la notificación:

  • builder.setContentTitle () // requerido
  • .setSmallIcon () // requerido
  • .setContentText () // requerido

Ver ejemplo:

private NotificationManager notifManager; public void createNotification(String aMessage, Context context) { final int NOTIFY_ID = 0; // ID of notification String id = context.getString(R.string.default_notification_channel_id); // default_channel_id String title = context.getString(R.string.default_notification_channel_title); // Default Channel Intent intent; PendingIntent pendingIntent; NotificationCompat.Builder builder; if (notifManager == null) { notifManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { int importance = NotificationManager.IMPORTANCE_HIGH; NotificationChannel mChannel = notifManager.getNotificationChannel(id); if (mChannel == null) { mChannel = new NotificationChannel(id, title, importance); mChannel.enableVibration(true); mChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400}); notifManager.createNotificationChannel(mChannel); } builder = new NotificationCompat.Builder(context, id); intent = new Intent(context, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); builder.setContentTitle(aMessage) // required .setSmallIcon(android.R.drawable.ic_popup_reminder) // required .setContentText(context.getString(R.string.app_name)) // required .setDefaults(Notification.DEFAULT_ALL) .setAutoCancel(true) .setContentIntent(pendingIntent) .setTicker(aMessage) .setVibrate(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400}); } else { builder = new NotificationCompat.Builder(context, id); intent = new Intent(context, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); builder.setContentTitle(aMessage) // required .setSmallIcon(android.R.drawable.ic_popup_reminder) // required .setContentText(context.getString(R.string.app_name)) // required .setDefaults(Notification.DEFAULT_ALL) .setAutoCancel(true) .setContentIntent(pendingIntent) .setTicker(aMessage) .setVibrate(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400}) .setPriority(Notification.PRIORITY_HIGH); } Notification notification = builder.build(); notifManager.notify(NOTIFY_ID, notification); }