Как исправить эту ошибку: "android.app.RemoteServiceException: плохое уведомление, отправленное из пакета"

Информация о сбое:

android.app.RemoteServiceException: Bad notification posted from package com.xx.xx:
Couldn't create icon: StatusBarIcon(pkg=com.xx.xx user=0 id=0x7f02035c level=0      visible=true num=0 )  
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1372)  
android.os.Handler.dispatchMessage(Handler.java:102)  
android.os.Looper.loop(Looper.java:136)  
android.app.ActivityThread.main(ActivityThread.java:5139)  
java.lang.reflect.Method.invokeNative(Native Method)  
java.lang.reflect.Method.invoke(Method.java:515)  
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796)  
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612)  
dalvik.system.NativeStart.main(Native Method)

Я думаю, проблема в том, что resid не может найти ресурс-ресурс. что вы думаете?

Ответ 1

У меня была та же проблема. Я заметил, что я использовал Vector Drawable для небольшого значка, и эта ошибка произошла только на устройствах с предварительным леллипопом. Использование ресурса PNG для устройств с предварительным лечением подтвердило проблему.

Ответ 2

TL; DR

При использовании возможности Firebases установить уведомление, используйте PNG вместо вектора, установив default_notification_icon в AndroidManifest.xml

Длинное описание

У нас возникла проблема при получении push-уведомлений на LG G2 с Android 4.4.2 Ткань (и catlog) показала следующую трассировку стека:

Fatal Exception: android.app.RemoteServiceException: Bad notification posted from package de.xxx.xxx: Couldn't create icon: StatusBarIcon(pkg=de.xxx.xxx=0 id=0x7f0200a6 level=0 visible=true num=0 )
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1367)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:136)
       at android.app.ActivityThread.main(ActivityThread.java:5105)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:515)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
       at dalvik.system.NativeStart.main(NativeStart.java)

Обратите внимание, что в стеке нет класса, соответствующего нашему пакету. Кроме того, был вызван onMessageReceived (проверен не только с точкой отладки, но также и с Log.e(TAG, "...")). Это означает, что мы не устанавливаем уведомление, это Firebase SDK.

Поскольку никакого кода не задействовано, я понял (после болезненных часов головокружения) ошибка должна быть в AndroidManifest.xml. Мы устанавливаем другой значок уведомления со следующим фрагментом:

<meta-data
    android:name="com.google.firebase.messaging.default_notification_icon"
    android:resource="@drawable/ic_notification" />

Здесь @drawable/ic_notification был векторным вектором (SVG). Я изменил его на PNG, и авария исчезла.

Ответ 3

Я видел ошибку "Не удалось создать значок: StatusBarIcon" раньше, и это происходит из-за использования недопустимого идентификатора ресурса с помощью setSmallIcon в экземпляре NotificationCompat.Builder. Также, если вы не устанавливаете маленький значок вообще, ваше уведомление не будет отображаться. Вы можете использовать getApplicationInfo(). Icon как быстрый откат, если ваш код пытается получить идентификатор ресурса во время выполнения.