FilterBox-Doc

通知滤盒 Filter Box 高级过滤规则指南

通知滤盒从 1.0.0 版开始新增高级过滤,可以根据通知的任意属性来进行自定义判断过滤。可以实现如「消除音乐 app 除播放控制外的所有通知」这样的较复杂功能。

高级过滤功能使用 JSON 语法。使用前请确保您知道如何书写 JSON,了解正则表达式。

示例

以下是实现音乐 app 保留播放控制条去广告的配置示例:

{
  "match": "NONE",
  "node": [
    {
      "field": "android.template",
      "regex": "MediaStyle"
    },
    {
      "field": "filterbox.field.HAS_BIG_CONTENT_VIEW",
      "regex": "true"
    }
    ]
}

在通知滤盒中新建一条规则,勾选你常用的音乐 app(如网易云、QQ 音乐等),选择「高级匹配模式」,复制并粘贴上述 JSON 即可使用。

语法

逐行解释:

  "match": "NONE",

匹配模式,目前支持 ALL、ANY、NONE 三种选项,均为大写。

分别表示一条通知如果 匹配所有节点 / 匹配任意一个节点 / 不匹配任何节点 就会被过滤。

  "node": [],

匹配节点数组,数量不限。

    {
      "field": "android.template",
      "regex": "MediaStyle"
    },

节点:每一个节点都需要 fieldregex 两个字段。

regex 为正则表达式,满足该正则即被匹配。

有哪些 field 字段可用呢?请直接在通知滤盒时间线内点开最近的 20 条通知(为节约内存,旧通知可能会清除),选择「调试信息」即可看到所有可用的字段。

调试信息界面

上述字段中,filterbox.field.XXX 是由通知滤盒实现填充的;其余所有字段都为读取 Notification#extras 得到的。

为了便于处理,所有内容都被转换为字符串。

TIPS

因为国外厂商以及网易云等较遵守 Android 开发规范的 app 会使用 Android 原生的音乐通知实现,也就是 MediaStyle

而其他国内 app 往往倾向于绕开 Android 系统,自行绘制界面,因此对它们使用 filterbox.field.HAS_BIG_CONTENT_VIEW (是否有自定义扩展视图)进行鉴别。

所以需要两个节点都不满足的通知,才被过滤。

是的,推荐使用各种编辑器来避免漏逗号之类的语法错误。或许你可以试试这个在线的: http://jsoneditoronline.org/