Después de actualizar mi proyecto a Android O
buildToolsVersion "26.0.1"
Lint en Android Studio muestra una advertencia obsoleta para el siguiente método de creación de notificaciones:
new NotificationCompat.Builder(context)
El problema es: los desarrolladores de Android actualizan su documentación que describe NotificationChannel para admitir notificaciones en Android O, y nos proporcionan un fragmento, pero con la misma advertencia obsoleta:
Notification notification = new Notification.Builder(MainActivity.this)
.setContentTitle("New Message")
.setContentText("You've received new messages.")
.setSmallIcon(R.drawable.ic_notify_status)
.setChannelId(CHANNEL_ID)
.build();
Mi pregunta: ¿hay alguna otra solución para generar notificaciones y todavía es compatible con Android O?
Una solución que encontré es pasar el ID del canal como un parámetro en el constructor Notification.Builder. Pero esta solución no es exactamente reutilizable.
new Notification.Builder(MainActivity.this, "channel_id")
android
notifications
android-notifications
GuilhermeFGL
fuente
fuente
notificationBuild.setChannelId("channel_id")
. En mi caso, esta última solución es más reutilizable ya que miNotificationCompat.Builder
se reutiliza en un par de métodos, guardando parámetros para iconos, sonidos y vibraciones.Respuestas:
Se menciona en la documentación que el método del constructor
NotificationCompat.Builder(Context context)
ha quedado en desuso. Y tenemos que usar el constructor que tiene elchannelId
parámetro:NotificationCompat.Builder Documentation:
Notificación Documentación del constructor:
Si desea reutilizar los
channelId
configuradores del generador, puede crear el generador con , y pasar ese generador a un método auxiliar y establecer su configuración preferida en ese método.fuente
Notification.Builder(context)
solución en la sesión NotificationChannel. Pero bueno, al menos encontraste una publicación en la que se notificaba que este desaprobación =)NotificationCompat.Builder(Context context)
, y luego asignar el canal de la siguiente manera:builder.setChannelId(String channelId)
Aquí hay un código de trabajo para todas las versiones de Android a partir de API LEVEL 26+ con compatibilidad con versiones anteriores.
fuente
.setPriority(Notification.PRIORITY_MAX)
otro código actualizado para 26 API. `Llame al constructor de 2 argumentos: para compatibilidad con Android O, llame a support-v4
NotificationCompat.Builder(Context context, String channelId)
. Cuando se ejecuta en Android N o anterior,channelId
se ignorará. Cuando se ejecuta en Android O, también crea unNotificationChannel
con el mismochannelId
.Fuera de código de ejemplo la fecha: El código de ejemplo en varias páginas JavaDoc como Notification.Builder llamado
new Notification.Builder(mContext)
está fuera de fecha.Constructores en desuso :
Notification.Builder(Context context)
y v4NotificationCompat.Builder(Context context)
están en desuso a favor deNotification[Compat].Builder(Context context, String channelId)
. (Consulte Notification.Builder (android.content.Context) y v4 NotificationCompat.Builder (Contexto contextual) .)Clase en desuso : toda la clase v7
NotificationCompat.Builder
está en desuso. (Consulte v7 NotificationCompat.Builder .) Anteriormente, la v7NotificationCompat.Builder
era necesaria para admitirNotificationCompat.MediaStyle
. En Android O, hay una v4NotificationCompat.MediaStyle
en la biblioteca de medios-compat 'sandroid.support.v4.media
paquete. Usa ese si lo necesitasMediaStyle
.API 14+: en la Biblioteca de soporte de 26.0.0 y superior, los paquetes support-v4 y support-v7 admiten un nivel mínimo de API de 14. Los nombres v # son históricos.
Ver revisiones recientes de la biblioteca de soporte .
fuente
En lugar de buscar
Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
todas las respuestas que sugieren, hay una forma un poco más simple:Agrega la siguiente línea a la
application
sección del archivo AndroidManifest.xml como se explica en la Configuración de una aplicación de cliente Firebase Cloud Messaging en el documento de Android :Luego agregue una línea con un nombre de canal al archivo values / strings.xml :
Después de eso, podrá utilizar la nueva versión del constructor NotificationCompat.Builder con 2 parámetros (ya que el antiguo constructor con 1 parámetro ha quedado en desuso en Android Oreo):
fuente
Aquí está el código de muestra, que funciona en Android Oreo y menos que Oreo.
fuente
Muestra simple
fuente
El código correcto será:
con dependencia 26.0.1 y nuevas dependencias actualizadas como 28.0.0.
Algunos usuarios usan este código en la forma de esto:
Entonces, la lógica es el método que declarará o iniciará, luego se utilizará el mismo método en el lado derecho para la asignación. si en Leftside of = utilizará algún método, se utilizará el mismo método en el lado derecho de = para Asignación con nuevo.
Pruebe este código ... seguramente funcionará
fuente
Este constructor quedó en desuso en el nivel de API 26.1.0. use NotificationCompat.Builder (Context, String) en su lugar. Todas las notificaciones publicadas deben especificar un Id. De canal de notificación.
fuente
fuente