Android中解决Bad notification posted from package packagename导致的崩溃问题

当app启动时出现崩溃,并且有如下错误日志:
android.app.RemoteServiceException: Bad notification posted from package com.test.hm: Couldn't create icon: StatusBarIcon(icon=Icon(typ=RESOURCE pkg=com.test.hm id=0x7f0808ae) visible user=0 )

这就说明在显示Notification通知时由于无法加载图标,而导致的崩溃。这种情况大多出现在app启动时立即显示了通知,而通知中设置了app图标,比如:静默下载app。
出现上述问题的原因可能是在初始化通知时,加载图片的方式有问题。不能使用通用的方式加载app图标,应该改用mContext.getApplicationInfo().icon方式。

修改前:

NotificationCompat.Builder builder = new NotificationCompat.Builder(mContext, "notification-channel");
builder.setContentTitle("已下载(0%)") //设置标题
        .setSmallIcon(R.drawable.ic_launcher) //设置小图标
        .setLargeIcon(BitmapFactory.decodeResource(mContext.getResources(), R.drawable.ic_launcher)) //设置大图标
        .setContentText("正在下载") //设置内容
        .setProgress(100, 0, false); //设置进度条

修改后:

NotificationCompat.Builder builder = new NotificationCompat.Builder(mContext, "notification-channel");
builder.setContentTitle("已下载(0%)") //设置标题
        .setSmallIcon(mContext.getApplicationInfo().icon) //设置小图标
        .setLargeIcon(BitmapFactory.decodeResource(mContext.getResources(), mContext.getApplicationInfo().icon)) //设置大图标
        .setContentText("正在下载") //设置内容
        .setProgress(100, 0, false); //设置进度条

注:此问题只在特定机型上会复现,比如:华为Mate8。大部分手机如果通知中的图标加载失败的话,系统内部会捕获异常,而不会导致app崩溃,现象是无法显示出通知。所以如果通知没有正常显示出来,也可以看看是否是图标未加载成功。

Guess you like

Origin blog.csdn.net/chenzhengfeng/article/details/119890222