studio oreo notificationcompat notification notificaciones example compat channel_id android android-notifications

notificationcompat - notification android oreo example



Notificación Compat con API 26 (5)

Cree el NotificationChannel solo si API> = 26

public void initChannels(Context context) { if (Build.VERSION.SDK_INT < 26) { return; } NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); NotificationChannel channel = new NotificationChannel("default", "Channel name", NotificationManager.IMPORTANCE_DEFAULT); channel.setDescription("Channel description"); notificationManager.createNotificationChannel(channel); }

Y luego solo usa:

NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context, "default");

Por lo tanto, sus notificaciones funcionan tanto con API 26 (con canal) como con versiones inferiores (sin).

No veo ninguna información sobre cómo usar NotificationCompat con los Notification Channels Android O

Veo un nuevo Constructor que toma un channelId pero cómo tomar una notificación Compat y usarla en un NotificationChannel ya que createNotificationChannel toma un objeto NotificationChannel


Declarar administrador de notificaciones:

final NotificationManager mNotific= (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); CharSequence name="Ragav"; String desc="this is notific"; int imp=NotificationManager.IMPORTANCE_HIGH; final String ChannelID="my_channel_01";

Canal de notificaciones

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationChannel mChannel = new NotificationChannel(ChannelID, name, imp); mChannel.setDescription(desc); mChannel.setLightColor(Color.CYAN); mChannel.canShowBadge(); mChannel.setShowBadge(true); mNotific.createNotificationChannel(mChannel); } final int ncode=101; String Body="This is testing notific";

Generador de notificaciones

Notification n= new Notification.Builder(this,ChannelID) .setContentTitle(getPackageName()) .setContentText(Body) .setBadgeIconType(R.mipmap.ic_launcher) .setNumber(5) .setSmallIcon(R.mipmap.ic_launcher_round) .setAutoCancel(true) .build();

NotificationManager notifica al usuario:

mNotific.notify(ncode, n);


NotificationChannel en realidad agrupa múltiples notificaciones en canales. Básicamente le da más control del comportamiento de notificación al usuario. Puede leer más sobre Notification Channel y su implementación en Trabajar con Notification Channel | Con el ejemplo

Notification Channel solo es aplicable para Android Oreo.

//Notification channel should only be created for devices running Android 26 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationChannel notificationChannel = new NotificationChannel("unique_channel_id","channel_name",NotificationManager.IMPORTANCE_DEFAULT); //Boolean value to set if lights are enabled for Notifications from this Channel notificationChannel.enableLights(true); //Boolean value to set if vibration is enabled for Notifications from this Channel notificationChannel.enableVibration(true); //Sets the color of Notification Light notificationChannel.setLightColor(Color.GREEN); //Set the vibration pattern for notifications. Pattern is in milliseconds with the format {delay,play,sleep,play,sleep...} notificationChannel.setVibrationPattern(new long[]{500,500,500,500,500}); //Sets whether notifications from these Channel should be visible on Lockscreen or not notificationChannel.setLockscreenVisibility( Notification.VISIBILITY_PUBLIC); }

Tenga en cuenta que la identificación del canal que se pasa al constructor actúa como el identificador único para ese canal de notificación. Ahora cree la Notificación como se muestra a continuación

// Creating the Channel NotificationManager notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); notificationManager.createNotificationChannel(notificationChannel);

Para agregar cualquier notificación a este canal, simplemente pase la ID del canal como se muestra a continuación

//We pass the unique channel id as the second parameter in the constructor NotificationCompat.Builder notificationCompatBuilder=new NotificationCompat.Builder(this,NOTIFICATION_CHANNEL_ID); //Title for your notification notificationCompatBuilder.setContentTitle("This is title"); //Subtext for your notification notificationCompatBuilder.setContentText("This is subtext"); //Small Icon for your notificatiom notificationCompatBuilder.setSmallIcon(R.id.icon); //Large Icon for your notification notificationCompatBuilder.setLargeIcon( BitmapFactory.decodeResource(getResources(),R.id.icon)); notificationManager.notify( NOTIFICATION_ID,notificationCompatBuilder.build());


Sé que esta respuesta llega tarde, ¡pero mejor tarde que nunca!
Acabo de lanzar la biblioteca de notification-channel-compat que proporciona compatibilidad con el canal de notificaciones desde OS 4.0. Como los desarrolladores de todos modos tienen que diseñar canales, ahora pueden usar los beneficios de los canales para todos los dispositivos, y no tienen que diseñar por separado para dispositivos más antiguos.
La biblioteca utiliza las clases de canal integradas para dispositivos con OS 8.0+ y la imita para dispositivos más antiguos. Todo lo que se necesita es usar nuestras clases NotificationChannelCompat , NotificationChannelGroupCompat y NotificationChannelManagerHelper , y agregar una línea de código. Puedes ver más en notification-channel-compat . Por favor, pruébelo y avíseme de cualquier issues .
Gracias,
Lionscribe


Tenga cuidado si hizo todo el trabajo y no obtuvo ningún resultado. En algunos dispositivos, debe establecer la prioridad de notificación.

final NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(mContext, "default") .setPriority(Notification.PRIORITY_MAX);