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

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

当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, "notific
从提供的引用中虽未直接提及 “pp.RemoteServiceException: Bad notification posted” 错误的解决方法,但可从相关错误的信息中获取一些思路。 ### 检查通知渠道 在 Android 8.0(API 级别 26)及更高版本中,通知需要指定有效的通知渠道。若通知渠道无效,可能会引发类似错误。如引用[1]中提到 “invalid channel for service notification”,表明通知渠道问题可能导致异常。要确保在创建通知时指定了有效的通知渠道,示例代码如下: ```java if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationChannel channel = new NotificationChannel("channel_id", "channel_name", NotificationManager.IMPORTANCE_DEFAULT); NotificationManager manager = getSystemService(NotificationManager.class); manager.createNotificationChannel(channel); } NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "channel_id") .setSmallIcon(R.drawable.ic_notification) .setContentTitle("Title") .setContentText("Content"); Notification notification = builder.build(); ``` ### 检查通知图标 通知图标不能为零,引用[2]中 “icon must be non - zero” 表明图标问题可能引发异常。要确保在创建通知时设置了有效的图标,示例代码如下: ```java NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "channel_id") .setSmallIcon(R.drawable.ic_notification) // 确保 R.drawable.ic_notification 是有效的图标资源 .setContentTitle("Title") .setContentText("Content"); ``` ### 清除缓存并重启 Android Studio 若在编译打包时出现错误,可尝试清除 Android Studio 的缓存并重启。如引用[3]中提到,重新打开 Android Studio 并清除缓存后,一些编译错误得到解决。可通过以下步骤操作: 1. 关闭 Android Studio。 2. 找到 Android Studio 的缓存目录(通常在 `~/.AndroidStudio<version>/system/caches`),删除该目录下的所有文件。 3. 重新打开 Android Studio。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值