如何修复此错误:“android.app.RemoteServiceException:Bad notification posted from package”

19

崩溃信息如下:

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找到可绘制资源。你有什么意见?

请在出现错误的地方发布代码。 - Leonardo
用户发送的崩溃信息,此项目使用的通知计数超过十个。我无法确定哪一个导致了崩溃。 - user3879225
哪个进程崩溃了? - JoxTraex
请尝试我的答案 https://dev59.com/yl8e5IYBdhLWcg3w0dNJ#45814999 - karthik vishnu kumar
3个回答

15

我面对同样的问题。我注意到小图标使用了矢量图形,并且这个错误只在Android 5.0以下的设备上发生。使用PNG资源可以解决这个问题。


1
问题已经解决! - DIRTY DAVE
使用PNG并不总是解决问题,我仍然会在仅限于Android 5.1的情况下偶尔遇到此错误。更多解释请参见:https://dev59.com/yl8e5IYBdhLWcg3w0dNJ#26024747 - Yoann Hercouet

9

TL;DR

在使用 Firebase 设置通知时,通过在 AndroidManifest.xml 中设置 default_notification_icon,使用 PNG 而不是矢量图。

详细说明

我们在 LG G2 上收到推送通知时遇到了问题,它运行着 Android 4.4.2。Fabric(和 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 格式,问题就解决了。


谢谢你的帮助。 - Momen Zaqout

3
我之前见过“无法创建图标:StatusBarIcon”错误,这是因为在NotificationCompat.Builder实例上使用无效的资源id设置setSmallIcon引起的。如果你根本没有设置小图标,那么你的通知将不会显示。如果你的代码在运行时尝试获取资源id,你可以使用getApplicationInfo().icon作为快速备用方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接