You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发:如何创建无图标的通知操作?

解决无图标通知操作的问题

我来帮你搞定这个问题!旧版的addAction(int icon, CharSequence title, PendingIntent intent)确实已经被弃用了,现在咱们用Notification.Action.Builder来创建无图标的通知操作才是规范做法,而且能完美实现你的需求。

步骤详解+代码示例

  1. 先准备好点击操作要触发的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
    );
    
  2. 创建无图标的通知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)来明确指定无图标,效果完全一致。

  3. 把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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:15:34