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

当app在华为Mate8等特定机型启动时崩溃,日志显示因无法加载通知图标导致。问题源于在创建通知时使用了错误的图标加载方式。修正方法是使用mContext.getApplicationInfo().icon来设置通知的小图标和大图标。这确保了在不同设备上的兼容性,避免了因图标加载失败引发的崩溃。
摘要由CSDN通过智能技术生成

当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崩溃,现象是无法显示出通知。所以如果通知没有正常显示出来,也可以看看是否是图标未加载成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值