通知哨兵 · NotiSentry

一键管理所有应用的运营消息 / 营销推广 / 活动推荐类通知通道。仅支持 MIUI / HyperOS。

下载 APK · 反馈问题 · 源代码 · 规则库

它解决什么问题

现在的 App 越来越喜欢把广告塞进通知栏:签到提醒、限时活动、会员专享、猜你喜欢、直播开播、新歌推送……这些通知通常不会叫「广告」,而是挂在「运营消息」「个性化推荐」「活动中心」这类看起来还算正经的通道下。

系统级屏蔽要么一刀切(整个 App 的通知全关,验证码和聊天一起没了),要么靠关键词猜文案(App 换个说法就漏)。通知哨兵从通道这一层下手:读取每个应用的通知通道清单,按关键词识别出营销类通道并直接关闭,正常通道原样保留。

关掉的是通道,不是消息,验证码、支付、聊天、设备提醒都不受影响。

功能

概览

  • 模块激活状态、作用域是否勾选
  • 已扫描应用数、匹配通道数、已屏蔽通道数
  • 当前规则库版本(点击可进作用域列表)
  • 设备与环境信息(系统版本、Android API 等级等)

功能页

  • 按应用分组列出所有已匹配到营销通道的应用,只显示真正有广告的,不刷屏
  • 每个应用显示「通道开启 x / y,关闭 z」,一眼看出哪些还没处理
  • 顶部搜索框,按应用名或包名过滤
  • 单条通道独立开关,可以只关某一条
  • 右上角菜单一键全部拦截 / 全部恢复
  • 检测结果缓存在进程内,切到设置页再回来不会清空

应用详情

  • 展开某个应用的全部通道
  • 显示通道名、通道 ID、重要性等级、当前开关状态
  • 逐条切换,支持整组操作

通道导出

  • 列出设备上全部已安装应用
  • 把任意应用的通知通道表导出成 JSON(通道 ID、名称、重要性、开关)
  • 遇到漏拦时把这份 JSON 附在 Issue 里,是最快的定位方式

设置

  • 规则管理:云端规则单独启停、手动同步、自定义规则增删改,热生效
  • 主题:跟随系统 / 浅色 / 深色,可选 Monet 取色
  • 界面:悬浮底栏、液态玻璃效果、模糊强度
  • 语言:简体中文 / English
  • 配置导入导出:规则与设置打包成 JSON,方便换机或备份

开关怎么看

列表里的开关控制的是通道是否开启,不是「是否已拦截」——这两者反过来是最常见的误解:

  • 开 = 通道开启,这类推送会正常送达
  • 关 = 通道关闭,这类推送被拦截,不再出现在通知栏

每个应用行显示的「通道开启 x / y,关闭 z」中,z 越大说明拦得越多。关错的通道随时可以再打开,不会丢数据。

规则体系

默认规则库放在独立仓库 NotiSentry-Rules,格式为 JSON,任何人都可以 fork 后提交改进。

  • 自动同步:每次启动应用会静默拉取一次云端规则(12 小时内已同步过则跳过),不打扰用户;设置页也可以手动同步并看到上次同步时间
  • 多规则并存:规则库里有多条规则(official 通用规则、默认关闭的 aggressive 激进规则),正向关键词取并集,每条都可以单独启停
  • 排除词全局优先:任意一条规则的排除词命中即放行,避免误伤验证码、支付、聊天等通道
  • 停用规则不失效排除词:停用某条规则只是不再用它匹配正向词,它的排除词仍然生效——否则停用「激进规则」反而会让误关变多
  • 自定义规则:设置页可新建、编辑、删除自己的规则,与云端规则一起参与匹配
  • 离线兜底:从未同步成功时使用内置规则副本,功能不受影响;同步失败时也不会覆盖本地已有规则

使用

  1. 在 LSPosed 中启用模块,作用域勾选「系统框架」(android)
  2. 重启手机
  3. 打开通知哨兵,授予「查询所有应用」权限
  4. 进入功能页,等待扫描完成,按需开关通道

第 3 步很容易漏掉。Android 11 之后默认只能看到极少数应用包,权限没给或没生效时,扫描结果会是空的或者只有两三个应用。遇到这种情况先在系统设置里确认权限状态,再回到应用点一次「重新检测」。

修改通道开关是即时生效的,不需要重启。升级模块后如果新关键词没生效,点一次「重新检测」或杀掉应用重启即可。

匹配原理

模块通过 LSPosed 在系统框架进程中挂钩 INotificationManager,读取各应用的通知通道数据。通道名和通道 ID 会经过两层词表:

  • 识别词表:运营消息、营销推广、活动、推荐、商城、签到、会员、直播、个性化推送、内容社区、悬浮锁屏、抽奖、抢兑……
  • 排除词表:验证码、校验码、支付、订单、物流、聊天、通话、安全提醒等功能性词

命中任一条启用规则的正向词、且未命中任何一条规则的排除词的通道,会被标记为营销通道。所有匹配结果在本地计算,不联网、不上传、不收集任何数据——联网的只有拉取规则库这一步。

由于不同系统版本的 INotificationManager 方法签名存在差异(Android 17 上就有改动),模块采用动态枚举方法名并自动填充实参的方式调用,以兼容签名变化。

适用环境

  • 系统:MIUI / HyperOS(依赖 MIUI 的通知通道实现,其他 ROM 未验证)
  • Android:13 及以上
  • 框架:LSPosed

已在 REDMI K80 Pro(HyperOS 4.0.0.10 / Android 17)+ LSPosed 实测通过。

排错

扫描结果为空:先确认模块已激活、作用域勾选了「系统框架」、已授予「查询所有应用」权限。三项都正常仍然为空,请附 LSPosed 日志提 Issue。

某些广告没被拦:在应用详情里找到那条通道,用通道导出功能保存 JSON,把通道名和通道 ID 一起贴出来。多数情况是通道名用了新的营销说法,补进词表就能解决。

规则同步失败:检查网络连通性(raw.githubusercontent.com 在部分网络下不可达);同步失败不会影响已有规则,可继续使用本地版本。

点击按钮没反应 / 弹窗不显示:请上报系统版本与复现步骤。

致谢

许可

AGPL-3.0

Releases

1.1.2

Stable

10/30/2026, 4:26:33 AM

新增

  • 启动自动同步规则:每次打开应用会静默拉取一次云端规则库,距上次成功同步不足 12 小时则跳过,不额外耗流量;同步失败不影响已有规则
  • 设置页规则管理:云端规则可逐条启停、一键手动同步(显示上次同步时间与版本),自定义规则支持新建 / 编辑 / 删除

改进

  • 概览页「已开启」统计改为「已屏蔽」,直接显示被拦截的通道数,与用户关心的结果对齐
  • 概览页「作用域」卡片改为「规则版本」,显示当前规则库版本号,点击仍可进作用域列表;作用域状态在模块状态卡里已有体现
  • 应用列表摘要改为「通道开启 x / y,关闭 z」,避免把「开关开着」误读成「已拦截」
  • 一键操作改名为「全部拦截 / 全部恢复」,说清动作方向

Assets

1

1.1.1

Stable

10/30/2026, 2:36:33 AM

通知哨兵 v1.1.1

改进

  • 关键词表补强:新增签到、抢兑、抽奖、积分兑换、任务奖励、每日任务、互动活动、社区内容、内容社区、悬浮锁屏等 20 个词
  • 新增英文营销词识别:promotion、promo、advert、campaign、coupon、discount、recommend、lottery、checkin

修复

  • 小米商城「互动活动」「悬浮锁屏」、TT语音「签到、抢兑活动」、小红书「社区内容 / 精选社区内容」等通道不再漏拦

Assets

1

1.1.0

Stable

10/29/2026, 11:14:10 AM

通知哨兵 v1.1.0

本版改动

  • 包名迁移至 cn.baymaxawa.xmsfnotichannel,app / hook 双模块目录同步调整
  • 版本号 1.0.1 → 1.1.0(versionCode 3)

功能上与 v1.0.1 完全一致,没有行为变化。

Assets

1