Depois de atualizar meu projeto para o Android O
buildToolsVersion "26.0.1"
O Lint no Android Studio está mostrando um aviso preterido para o método do construtor de notificações a seguir:
new NotificationCompat.Builder(context)
O problema é: os desenvolvedores do Android atualizam sua documentação descrevendo o NotificationChannel para oferecer suporte a notificações no Android O e nos fornecem um snippet, mas com o mesmo aviso preterido:
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();
Minha pergunta: Existe outra solução para criar notificações e ainda suporta o Android O?
Uma solução que encontrei é passar o ID do canal como parâmetro no construtor Notification.Builder. Mas essa solução não é exatamente reutilizável.
new Notification.Builder(MainActivity.this, "channel_id")
android
notifications
android-notifications
GuilhermeFGL
fonte
fonte
notificationBuild.setChannelId("channel_id")
. No meu caso, essa última solução é mais reutilizada, poisNotificationCompat.Builder
é reutilizada em alguns métodos, economizando parâmetros para ícones, sons e vibrações.Respostas:
É mencionado na documentação que o método do construtor
NotificationCompat.Builder(Context context)
foi descontinuado. E nós temos que usar o construtor que tem ochannelId
parâmetro:Documentação de NotificationCompat.Builder:
Documentação do Notification.Builder:
Se desejar reutilizar os setters do construtor, você pode criar o construtor com o
channelId
, e passar esse construtor para um método auxiliar e definir suas configurações preferidas nesse método.fonte
Notification.Builder(context)
solução na sessão NotificationChannel. Mas bom, pelo menos você encontrou um post notificando isso = =)NotificationCompat.Builder(Context context)
, e depois atribuir o canal assim:builder.setChannelId(String channelId)
Aqui está o código de trabalho para todas as versões do Android a partir do API LEVEL 26+ com compatibilidade com versões anteriores.
fonte
.setPriority(Notification.PRIORITY_MAX)
contrário, use o código atualizado da 26 API. `Ligue para o construtor 2-arg: Para compatibilidade com o Android O, ligue para support-v4
NotificationCompat.Builder(Context context, String channelId)
. Ao executar no Android N ou anterior, ochannelId
será ignorado. Ao executar no Android O, também crie umNotificationChannel
com o mesmochannelId
.Código de amostra desatualizado: o código de amostra em várias páginas JavaDoc, como a chamada Notification.Builder,
new Notification.Builder(mContext)
está desatualizado.Construtores preteridos:
Notification.Builder(Context context)
e v4NotificationCompat.Builder(Context context)
foram preteridos em favor deNotification[Compat].Builder(Context context, String channelId)
. (Consulte Notification.Builder (android.content.Context) e v4 NotificationCompat.Builder (contexto de contexto) .)Classe descontinuada: a classe inteira v7
NotificationCompat.Builder
foi descontinuada. (Consulte v7 NotificationCompat.Builder .) Anteriormente, a v7NotificationCompat.Builder
era necessária para dar suporteNotificationCompat.MediaStyle
. Em Android O, há um v4NotificationCompat.MediaStyle
na biblioteca de mídia-compat 'sandroid.support.v4.media
pacote. Use esse se você precisarMediaStyle
.API 14+: na Biblioteca de suporte da 26.0.0 e superior, os pacotes support-v4 e support-v7 suportam um nível mínimo de API de 14. Os nomes de v # são históricos.
Consulte Revisões recentes da biblioteca de suporte .
fonte
Em vez de procurar o
Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
máximo de respostas sugeridas, existe uma maneira um pouco mais simples:Adicione a seguinte linha à
application
seção do arquivo AndroidManifest.xml, conforme explicado no documento Configurar um aplicativo cliente do Firebase Cloud Messaging no Android :Em seguida, inclua uma linha com um nome de canal no arquivo values / strings.xml :
Depois disso, você poderá usar a nova versão do construtor NotificationCompat.Builder com 2 parâmetros (já que o construtor antigo com 1 parâmetro foi preterido no Android Oreo):
fonte
Aqui está o código de exemplo, que está funcionando no Android Oreo e menos que o Oreo.
fonte
Amostra Simples
fonte
O código correto será:
com dependência 26.0.1 e novas dependências atualizadas, como 28.0.0.
Alguns usuários usam esse código no formato a seguir:
Portanto, a lógica é o método que você declarará ou iniciará; o mesmo método no lado direito será usado para alocação. se em Leftside of = você usar algum método, o mesmo método será usado no lado direito de = for Allocation with new.
Experimente este código ... Certamente funcionará
fonte
Este construtor foi descontinuado no nível da API 26.1.0. use NotificationCompat.Builder (Context, String). Todas as notificações publicadas devem especificar um ID NotificationChannel.
fonte
fonte