当前位置: 首页 > news >正文

Android Notification 问题:Invalid notification (no valid small icon)

问题描述与处理策略

1、问题描述
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.my.notifications/com.my.notifications.MainActivity}: 
java.lang.IllegalArgumentException: Invalid notification (no valid small icon): 
Notification(channel=simple_channel shortcut=null contentView=null vibrate=null sound=null defaults=0x0 flags=0x10 color=0x00000000 vis=PRIVATE)
  1. 在 MainActivity 中创建了一个无效的 Notification 而抛出了 RuntimeException 异常

  2. 异常的具体原因是 Notification 没有设置的小图标 no valid small icon

  3. 在 Android 中,每个 Notification 都必须有一个小图标,这是通知的基本组成部分之一

2、处理策略
// 假设原来是这样的Notification notification = new NotificationCompat.Builder(this, CHANNEL_ID).setContentTitle("通知").setContentText("点击跳转到目标页面").setContentIntent(pendingIntent).setAutoCancel(true).build();
// 需要修改成这样的Notification notification = new NotificationCompat.Builder(this, CHANNEL_ID).setContentTitle("通知").setContentText("点击跳转到目标页面").setSmallIcon(R.drawable.ic_notification).setContentIntent(pendingIntent).setAutoCancel(true).build();

补充学习

1、IllegalArgumentException
(1)基本介绍
  1. IllegalArgumentException 是 Java 中的一个运行时异常,它继承自 RuntimeException

  2. IllegalArgumentException 通常用于指示传递给方法的参数不符合预期或违反了方法的约定

  • IllegalArgumentException 常见的触发场景如下
  1. 传递了空值(null)给不接受空值的方法参数

  2. 传递了超出方法参数预期范围的值,例如,不在指定范围内的数值

  3. 传递了类型不正确或格式不符合要求的参数,例如,将字符串转换为数字时字符串格式不正确

(2)复现
int result = Integer.parseInt("Hello World");System.out.println(result);
  • 输出结果
Exception in thread "main" java.lang.NumberFormatException: For input string: "Hello World"
  • 注:NumberFormatException 是 IllegalArgumentException 的子类
public class NumberFormatException extends IllegalArgumentException {...
}

2、Notification 信息
  • 这是一个简化的、用于日志记录或调试的 Notification 字符串表示
Notification(channel=simple_channel shortcut=null contentView=null vibrate=null sound=null defaults=0x0 flags=0x10 color=0x00000000 vis=PRIVATE)
(1)channel=simple_channel
  1. 表示 Notification 被分配到了名为 simple_channel 的通知渠道

  2. 在 Android Oreo(API 级别 26)及更高版本中,所有通知都必须分配到一个通知渠道,这个渠道用于定义通知的行为,例如,重要性、可见性、声音、振动设置等

(2)shortcut=null
  • 表示没有为 Notification 设置相关联的快捷方式
(3)contentView=null
  1. 表示没有为 Notification 设置自定义的布局,如果为 null,则使用系统默认的布局。

  2. 可以使用 setCustomContentView 方法设置自定义的布局

(4)vibrate=null
  1. 表示没有为 Notification 设置振动模式,如果为 null,则根据通知渠道的设置来决定是否振动

  2. 可以使用 setVibrate 方法为通知设置振动模式

(5)sound=null
  1. 表示没有为 Notification 设置声音,如果为 null,则根据通知渠道的设置来决定是否播放声音

  2. 可以通过 setSound 方法为 Notification 设置声音

(6)defaults=0x0
  1. 表示没有为 Notification 设置默认行为

  2. defaults 是一个标志位,可以包含多个值,例如,Notification.DEFAULT_ALL(应用所有默认行为,例如,声音、振动、灯光),Notification.DEFAULT_LIGHTS(仅应用灯光默认行为)

(7)flags=0x10
  1. 表示 Notification 被设置了某些标志

  2. flags 是一个标志位,可以包含多个值,例如,Notification.FLAG_ONGOING_EVENT(表示 Notification 是一个持续进行的事件,例如,音乐播放),Notification.FLAG_AUTO_CANCEL(表示当用户点击通知时,通知应该被取消)

(8)color=0x00000000
  1. 表示 Notification 的颜色被设置为透明(黑色,但透明度为 0%),如果为 null 或设置为透明,则使用系统默认的颜色

  2. 可以使用 setColor 方法为 Notification 指定一个颜色

(9)vis=PRIVATE
  • 可能是日志输出信息的一些其他部分
http://www.lryc.cn/news/512572.html

相关文章:

  • Python爬虫教程——7个爬虫小案例(附源码)_爬虫实例
  • Log4j2的Policies详解、SizeBasedTriggeringPolicy、TimeBasedTriggeringPolicy
  • ES中查询中参数的解析
  • 学习笔记:使用 pandas 和 Seaborn 绘制柱状图
  • 【每日学点鸿蒙知识】placement设置top、组件携带自定义参数、主动隐藏输入框、Web设置字体、对话框设置全屏宽
  • 后端开发-Maven
  • 自动化办公-合并多个excel
  • mavlink移植到单片机stm32f103c8t6,实现接收和发送数据
  • 小程序基础 —— 08 文件和目录结构
  • FIR数字滤波器设计——窗函数设计法——滤波器的时域截断
  • MySQLOCP考试过了,题库很稳,经验分享。
  • WPF 绘制过顶点的圆滑曲线 (样条,贝塞尔)
  • Kafka 幂等性与事务
  • day2 Linux操作系统指令
  • AI一周重要会议和活动概览
  • 重启ubuntu服务器,如何让springboot服务自动运行
  • python系列教程237——启动扩展功能
  • U盘格式化工具合集:6个免费的U盘格式化工具
  • 循环神经网络(RNN)入门指南:从原理到实践
  • 马原复习笔记
  • Android Room 框架的初步使用
  • 什么是过度拟合和欠拟合?
  • DotnetSpider实现网络爬虫
  • 锐捷WLAN产品出货量排名第一!
  • win32汇编环境下,对话框程序中生成listview列表控件,点击标题栏自动排序的示例
  • 自动化文档处理:Azure AI Document Intelligence
  • 【Maven】Maven打包机制详解
  • Python 向量检索库Faiss使用
  • pd.Timestamp接收的参数类型
  • FOC控制原理-ADC采样时机