Estou vendo a seguinte exceção nos logs de falha:
android.app.RemoteServiceException: Bad notification posted from package com.my.package: Couldn't create icon: StatusBarIcon(pkg=com.my.package user=0 id=0x7f02015d level=0 visible=true num=0 )
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1456)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5487)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(Native Method)
Estou postando minha notificação de um IntentService de um conjunto PendingIntent por meio do AlarmManager usando o seguinte método. Todos os valores passados aqui são dos extras do pacote configurável no PendingIntent / IntentService.
/**
* Notification
*
* @param c
* @param intent
* @param notificationId
* @param title
* @param message
* @param largeIcon
* @param smallIcon
*/
public static void showNotification(Context c, Intent intent,
int notificationId, String title, String message, int largeIcon,
int smallIcon) {
PendingIntent detailsIntent = PendingIntent.getActivity(c,
notificationId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// BUILD
NotificationCompat.Builder mNotifyBuilder = new NotificationCompat.Builder(
c);
// TITLE
mNotifyBuilder.setContentTitle(title).setContentText(message);
// ICONS
mNotifyBuilder.setSmallIcon(smallIcon);
if (Util.isAndroidOSAtLeast(Build.VERSION_CODES.HONEYCOMB)) {
Bitmap large_icon_bmp = ((BitmapDrawable) c.getResources()
.getDrawable(largeIcon)).getBitmap();
mNotifyBuilder.setLargeIcon(large_icon_bmp);
}
mNotifyBuilder.setContentIntent(detailsIntent);
mNotifyBuilder.setVibrate(new long[] { 500, 1500 });
mNotifyBuilder.setTicker(message);
mNotifyBuilder.setContentText(message);
// NOTIFY
NotificationManager nm = (NotificationManager) c
.getSystemService(Context.NOTIFICATION_SERVICE);
nm.notify(notificationId, mNotifyBuilder.build());
}
Pelo que vi de outras respostas - a exceção que estou vendo acontece quando setSmallIcon()
não é chamada corretamente.
Eu verifiquei e verifiquei se os IDs de recurso que estão sendo passados estão todos corretos.
Respostas:
O que estava acontecendo era que eu estava incluindo a referência de número inteiro ao ícone no pacote PendingIntent, e esse número foi posteriormente referenciado ao ser postado no NotificationManager.
Entre a obtenção da referência inteira e a intenção pendente, o aplicativo foi atualizado e todas as referências desenháveis foram alteradas. O número inteiro que costumava referenciar o drawable correto agora referenciava o drawable incorreto ou nenhum (nenhum - causando esta falha)
fonte
bundle.putString("img", "my_image")
e depois converter quando necessário para o inteiro @DrawableRes real da seguinte maneira:ctx.resources.getIdentifier(bundle.getString("img"), "drawable", ctx.packageName)
VectorXml
Sabe-se que o uso dentro da sua notificação causa esse problema. Use png'sfonte
drawable
pasta e png emdrawable-hdpi
,xhdpi
etc. Mas não havia png paradrawable-mdpi
, e ele travou no dispositivo MDPI ao postar uma notificação.Eu sempre tive o mesmo problema quando queria mostrar uma notificação no Kitkat. O que causou o problema para mim é que eu defini todos os ícones em xml (de svg), o pequeno ícone e o ícone de ação também. Depois de substituí-los por png-s, o problema foi resolvido ao meu lado.
fonte
android.app.RemoteServiceException: Notificação incorreta publicada
Eu tive o mesmo problema, mas fui resolvido. Meu problema é "arquivo .xml" do modo de exibição remota.
No meu arquivo xml, fui adicionado um
View
entre oLinearLayout
divisor for.O
View
componente acima criando a exceção de notificação incorreta. Esse motivo de exceção é apenas um arquivo xml de exibições remotas.Depois de remover esse componente View, meu código foi executado corretamente, sem nenhuma exceção. Por isso, senti que a gaveta do Notification não aceitava visualizações personalizadas.
Portanto, você não desenha nada como a exibição acima no arquivo .xml do
RemoteView
objeto.fonte
Meu problema era que o ícone que eu estava usando no
não foi gerado adequadamente. De acordo com o documento oficial :
Portanto, a melhor maneira de cumprir o exposto acima, usei o Notification Generator fornecido por Roman Nurik em https://romannurik.github.io/AndroidAssetStudio/index.html
Dessa forma, você pode usar uma imagem (levando em consideração que isso precisa ter um plano de fundo transparente) e permitir que o gerador faça o trabalho para gerar os diferentes tamanhos para os ícones de notificação.
O mais importante é que, se o gerador de ícones depois de navegar na imagem que você usar usar mostrar um círculo ou quadrado preenchido em branco, há problemas com a imagem, talvez porque ela não tenha transparências, verifique se você tem isso ok.
fonte
drawable
pasta e png emdrawable-hdpi
,xhdpi
etc. Mas não havia png paradrawable-mdpi
, e ele travou no dispositivo MDPI ao postar uma notificação.No meu aplicativo, esse tipo de bug ocorre apenas durante a atualização. Se a identificação do recurso for alterada na versão mais recente, o Android
RemoteView
poderá não encontrar o recurso e jogar fora oRemoteServiceException
. Se você publicar uma terceira versão e não alterar a identificação do recurso, os erros poderão desaparecer apenas temporariamente .É possível reduzir esse tipo de erro editando
res/values/public.xml
eres/values/ids.xml
. O compilador gerará uma identificação de recurso individual se a identificação de recurso não estiver empublic.xml
ouids.xml
. Quando você altera o nome do recurso ou adiciona novos recursos, o ID pode mudar e alguns dispositivos podem falhar em encontrá-lo.Portanto, a etapa é a seguinte:
res/values
encontre opublic.xml
eids.xml
public.xml
eids.xml
sobres/values
em seu código-fonte e cole as linhas u acabou de copiarNota:
O Gradle 1.3.0 e superior ignoram o local
public.xml
. Para fazê-lo funcionar, você precisa adicionar algum script em seubuild.gradle
Nota: Este script não suporta o projeto de submódulos. Estou tentando consertar isso.
fonte
Você passou no mesmo ícone
e você notificação
fonte
Caso o ícone não seja importante, você pode substituir,
Para
Isso funciona!
fonte
Eu tinha o RemoteServiceException quando o uso de Notificação na minha classe se estende do FirebaseMessagingService. Adicionei o seguinte código ao AndroidManifest.xml:
Também use o recurso ic_small definido na instância de uma classe Notification.Builder pelo método setSmallIcon (ícone int).
fonte
No Android Studio versão 3.0.0 e superior, ao adicionar uma nova imagem na pasta drawables, escolha drawable em vez de drawable-v24.
Se a imagem que você está usando já é uma (v24), basta copiá-la e colá-la no mesmo diretório (por exemplo: drawables). Desta vez, ele perguntará qual regular ou v24 - apenas certifique-se de que não é o v24 e tente novamente para corrigir o erro.
fonte
O mesmo problema aconteceu comigo também e resolvi o mesmo
MOTIVO : Isso está acontecendo porque estamos usando o drawable vetorial para RemoteViews e o drawable vetorial gera drawable em tempo de compilação. Também não sei por que alguns dispositivos não conseguem detectar o ID dos recursos desenháveis gerados enquanto atualizamos o aplicativo. Mas sim, esse foi o motivo.
REPRODUZIR Etapas 1. Instale a compilação anterior. 2. Envie uma notificação 3. Atualize a compilação com o código da próxima versão 4. Após atualizar o aplicativo, não abra o aplicativo e envie a notificação novamente
SOLUÇÃO Substitua o drawable vector pelo arquivo normal drawable (.png ou .jpg).
Espero que isso resolva o problema.
fonte
Se você tem uma notificação visível enquanto o aplicativo é atualizado, você pode encontrar isso. O que você precisa fazer é criar um BroadcastReceiver que aguarde uma mensagem PACKAGE_CHANGED; nesse momento, você encerra todos os seus serviços, o que também dispensa as notificações associadas.
fonte
Eu tive o mesmo problema ao definir uma notificação em um pacote. Eu tentei isso e resolveu o meu problema:
Verifique se setLargeIcon () invocou antes de setSmallIcon ().
fonte
Eu também tive o mesmo problema. O problema está no ícone que você está usando, eu estava usando o android.R.drawable.stat_sys_download. Vá para drawables.xml e cole isso.
e depois no seu código
Você pode tentar outra imagem em vez dessa imagem
fonte
Minha maneira de resolver isso: eu tinha visualizações "ruins" no meu layout (por exemplo, uma caixa de seleção) - então as removi.
O RemoteViews parece suportar apenas imagens e textos (a ser confirmado com a leitura do documento).
fonte
Eu tive RemoteServiceException ao usar android.support.constraint.ConstraintLayout. Altere para LinearLayout ou Relative e também android: layout_height = "wrap_content" para container
fonte
(essa não é a solução para a pergunta atual, mas ajuda alguém com um problema central semelhante) Eu também tive o mesmo problema, mas no meu caso eu usei o arquivo .png corrompido que está causando o mesmo problema. Então, eu o apaguei e incluí novamente o arquivo .png correto.
fonte
Por favor, substitua
<android.support.v7.widget.AppCompatTextView
com<TextView
de layout de notificação personalizada.Porque
android.support.v7.widget.AppCompatTextView
ouandroid.support.v7.widget.AppCompatImageView
só funciona em tempo de execução.Então use
TextView
ouImageView
fonte
Se alguém ainda estiver enfrentando esse problema: Adicione um arquivo png na sua pasta de desenho com o nome ic_stat_ic_notification (ou qualquer outro nome que você goste)
e no seu manifesto adicione abaixo algumas linhas
e você pode criar seus ícones por aqui -> https://romannurik.github.io/AndroidAssetStudio/icon
fonte
Sincronize o projeto e, em seguida, Limpe-o, Arquivo> Sincronizar e depois: Construir> Limpar Projeto
Espero que ajude todos vocês, é trabalho para mim
fonte
Eu recebi este erro devido ao link automático e às opções de linksClickable no textview no modo de exibição de notificação:
Seja cuidadoso!
fonte
Isso funcionou para mim. Comente a referência do ícone e, portanto, poderá usar o NotificationCompat.Builder sem problemas.
fonte