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