通知滤盒从 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,选择「高级匹配模式」,复制并粘贴上述 JSON 即可使用。
逐行解释:
"match": "NONE",
匹配模式,目前支持 ALL、ANY、NONE 三种选项,均为大写。
分别表示一条通知如果 匹配所有节点 / 匹配任意一个节点 / 不匹配任何节点 就会被过滤。
"node": [],
匹配节点数组,数量不限。
{
"field": "android.template",
"regex": "MediaStyle"
},
节点:每一个节点都需要 field
和 regex
两个字段。
regex
为正则表达式,满足该正则即被匹配。
有哪些 field
字段可用呢?请直接在通知滤盒时间线内点开最近的 20 条通知(为节约内存,旧通知可能会清除),选择「调试信息」即可看到所有可用的字段。
上述字段中,filterbox.field.XXX
是由通知滤盒实现填充的;其余所有字段都为读取 Notification#extras
得到的。
为了便于处理,所有内容都被转换为字符串。
大部分 App 开发者遵守 Android 开发规范,会使用 Android 原生的音乐通知实现,也就是 MediaStyle
。
少部分 App 开发者绕开 Android 系统自行绘制界面,因此对它们使用 filterbox.field.HAS_BIG_CONTENT_VIEW
(是否有自定义扩展视图)进行鉴别。
所以需要两个节点都不满足的通知,才被过滤。
是的,推荐使用各种编辑器来避免漏逗号之类的语法错误。或许你可以试试这个在线的: http://jsoneditoronline.org/