Android开发:如何创建无图标的通知操作?
解决无图标通知操作的问题
我来帮你搞定这个问题!旧版的addAction(int icon, CharSequence title, PendingIntent intent)确实已经被弃用了,现在咱们用Notification.Action.Builder来创建无图标的通知操作才是规范做法,而且能完美实现你的需求。
步骤详解+代码示例
先准备好点击操作要触发的
PendingIntent
这一步是定义用户点击通知操作后要执行的逻辑,比如启动某个Activity、发送广播等等,这里以启动MainActivity为例:Intent intent = new Intent(context, MainActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity( context, 0, // 请求码,可根据业务需求修改 intent, // 适配API 31+,必须指定IMMUTABLE或MUTABLE,这里用IMMUTABLE更安全 PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE );创建无图标的通知Action
关键就在这里:用Notification.Action.Builder构建操作时,把图标参数传null或者Icon.createWithResource(context, 0),就能实现无图标效果:Notification.Action noIconAction = new Notification.Action.Builder( null, // 传入null即可隐藏图标 "打开应用", // 替换成你的操作标题,比如"标记已读" pendingIntent ).build();如果你的最低适配版本是API 30及以上,也可以用
Icon.createWithResource(null, 0)来明确指定无图标,效果完全一致。把Action添加到你的通知Builder中
结合你原来的代码,修改后完整的代码如下:// 适配API 26+,必须创建通知渠道才能显示通知(重要!) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationChannel channel = new NotificationChannel( "custom_notify_channel", // 自定义渠道ID "通知渠道", // 用户可见的渠道名称 NotificationManager.IMPORTANCE_DEFAULT ); NotificationManager notificationManager = context.getSystemService(NotificationManager.class); notificationManager.createNotificationChannel(channel); } Notification.Builder builder = new Notification.Builder(context); builder.setContentTitle(notifyMessage1) .setContentText(notifyMessage2) .setSmallIcon(R.mipmap.ic_launcher) .setChannelId("custom_notify_channel") // API 26+必须指定渠道ID .addAction(noIconAction); // 添加无图标操作 Notification notification = builder.build();
额外提醒
- API 26及以上系统要求必须创建通知渠道才能显示通知,所以上面的渠道创建代码一定要加上,不然通知可能无法正常显示。
- 关于
PendingIntent的FLAG:API 31+强制要求指定IMMUTABLE或MUTABLE,如果你的操作不需要修改Intent内容,用IMMUTABLE更安全。
内容的提问来源于stack exchange,提问作者braulio.cassule
相关产品推荐
相关产品推荐

