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

Android Notification invisible Action使用示例咨询及同应用调用疑问

关于Notification.Builder.addInvisibleAction的使用说明

同一应用内是否可用?

技术上可以在同一应用内使用addInvisibleAction,但这并非该API的核心设计场景。invisible action的主要用途是给监听系统通知的第三方应用(如辅助工具、自动化App)提供额外操作入口。如果是同一应用内的逻辑,直接通过常规通知PendingIntent或本地事件处理会更简洁,无需依赖不可见Action。

代码示例

1. 发送包含不可见Action的通知

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import androidx.core.app.NotificationCompat;

public class NotificationHelper {
    private static final String CHANNEL_ID = "invisible_action_channel";
    private static final int NOTIFICATION_ID = 100;

    public static void sendNotificationWithInvisibleAction(Context context) {
        // 构建不可见Action的PendingIntent(这里用广播接收器举例)
        Intent actionIntent = new Intent(context, InvisibleActionReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(
                context,
                1001,
                actionIntent,
                PendingIntent.FLAG_UPDATE_CURRENT | (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? PendingIntent.FLAG_IMMUTABLE : 0)
        );

        // 创建不可见Action
        Notification.Action invisibleAction = new Notification.Action.Builder(
                R.drawable.ic_default, // 图标(系统不显示,但需传入合法资源)
                "Invisible Action", // 标题(系统不显示)
                pendingIntent
        ).build();

        // 构建并发送通知
        NotificationCompat.Builder builder = new NotificationCompat.Builder(context, CHANNEL_ID)
                .setSmallIcon(R.drawable.ic_notification)
                .setContentTitle("测试通知")
                .setContentText("包含不可见Action")
                .setPriority(NotificationCompat.PRIORITY_DEFAULT);

        // 仅在API 21及以上添加不可见Action
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            builder.addInvisibleAction(invisibleAction);
        }

        NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(NOTIFICATION_ID, builder.build());
    }
}

2. 接收不可见Action的广播接收器

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class InvisibleActionReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // 处理不可见Action触发后的逻辑
        Toast.makeText(context, "不可见Action已触发", Toast.LENGTH_SHORT).show();
    }
}

3. 同一应用内监听并获取不可见Action(可选)

如果需要在同一应用内监听自己的通知并获取不可见Action,可通过NotificationListenerService实现(注意需用户授权):

import android.service.notification.NotificationListenerService;
import android.service.notification.StatusBarNotification;
import android.app.Notification;
import java.util.List;

public class MyNotificationListener extends NotificationListenerService {
    @Override
    public void onNotificationPosted(StatusBarNotification sbn) {
        super.onNotificationPosted(sbn);
        // 仅处理本应用的通知
        if (getPackageName().equals(sbn.getPackageName())) {
            Notification notification = sbn.getNotification();
            // 获取不可见Action列表
            List<Notification.Action> invisibleActions = notification.getInvisibleActions();
            if (invisibleActions != null && !invisibleActions.isEmpty()) {
                for (Notification.Action action : invisibleActions) {
                    // 可触发Action的PendingIntent,或获取其信息
                    try {
                        action.actionIntent.send();
                    } catch (PendingIntent.CanceledException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}

在Manifest中注册服务:

<service
    android:name=".MyNotificationListener"
    android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
    <intent-filter>
        <action android:name="android.service.notification.NotificationListenerService" />
    </intent-filter>
</service>

内容的提问来源于stack exchange,提问作者Evgeniy Mishustin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 02:06:32