如何修复此错误:" android.app.RemoteServiceException:从包"发布错误通知

时间:2014-07-26 07:11:19

标签: android android-notifications

崩溃信息是:

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

3 个答案:

答案 0 :(得分:11)

我遇到了同样的问题。我注意到我使用Vector Drawable作为小图标,这个错误只发生在棒棒糖前设备上。为棒棒糖前设备使用PNG资源解决了这个问题。

答案 1 :(得分:5)

TL; DR

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

详细说明

我们在使用Android 4.4.2在LG G2上接收推送通知时遇到了问题 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,崩溃了。

答案 2 :(得分:3)

我之前看到过“无法创建图标:StatusBarIcon”错误,而且是因为在NotificationCompat.Builder实例上使用setSmallIcon的无效资源ID。此外,如果您根本没有设置小图标,则不会显示您的通知。如果您的代码试图在运行时获取资源ID,则可以使用getApplicationInfo()。icon作为快速回退。