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

Swift iOS:如何捕获系统通知横幅的滑动Dismiss操作?

能否捕获系统通知被滑动Dismiss的操作?

好问题!这确实是个能帮你修复Bug的关键需求,我来分平台给你梳理可行的方案和限制:

Android平台:可以实现,通过NotificationListenerService

Android系统提供了NotificationListenerService这个类,专门用于监听系统通知的各类事件,包括通知被滑动Dismiss的操作。具体步骤如下:

  1. 声明权限与注册服务
    在你的AndroidManifest.xml中添加必要权限和服务声明:

    <!-- 声明通知访问权限 -->
    <uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />
    <!-- 注册NotificationListenerService -->
    <service
        android:name=".MyNotificationListener"
        android:label="通知监听服务"
        android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
        <intent-filter>
            <action android:name="android.service.notification.NotificationListenerService" />
        </intent-filter>
    </service>
    
  2. 实现监听逻辑
    创建一个继承自NotificationListenerService的类,重写onNotificationRemoved方法——这个方法会在任何通知被移除(包括滑动Dismiss)时触发:

    public class MyNotificationListener extends NotificationListenerService {
        @Override
        public void onNotificationRemoved(StatusBarNotification sbn) {
            super.onNotificationRemoved(sbn);
            // 获取被移除的通知关键信息
            String packageName = sbn.getPackageName(); // 发送通知的应用包名
            int notificationId = sbn.getId(); // 通知ID
            
            // 根据你的需求过滤目标通知
            if ("com.example.targetapp".equals(packageName)) {
                // 通知被Dismiss了,这里可以通过LocalBroadcast/EventBus等方式把事件传给主应用
            }
        }
    }
    
  3. 引导用户授权
    这个服务需要用户手动在系统设置中给你的应用授予「通知访问」权限,所以你需要在应用中添加引导逻辑,跳转到对应的设置页面:

    Intent intent = new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS");
    startActivity(intent);
    

iOS平台:无法实现(沙盒限制)

iOS的沙盒机制非常严格,第三方应用无法监听其他应用的通知状态变化,包括滑动Dismiss的操作。苹果只允许应用监听自身发送的通知事件(比如通过UNUserNotificationCenterDelegate的代理方法),但对于其他应用的通知,没有任何公开API可以获取其被移除的事件。

额外注意点

  • Android的NotificationListenerService从API 18开始支持,如果你的应用需要兼容更低版本,需要做版本判断和降级处理。
  • 监听所有通知移除事件可能会带来性能消耗,建议在onNotificationRemoved中精准过滤你关心的通知(比如通过目标应用的包名),避免不必要的逻辑执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 20:47:36