FilterBox

高度なフィルタールール(JSON)

JSON と正規表現で通知の任意のフィールドにマッチさせる、FilterBox の高度なルールの書き方。

FilterBox はバージョン 1.0.0 から「高度なフィルター」に対応しています。通知の任意の属性を条件にでき、「音楽アプリの通知のうち、再生コントロール以外をすべて消す」といった複雑な処理も実現できます。

高度なフィルターは JSON で記述します。JSON の書き方と正規表現を理解したうえでご利用ください。

例

音楽アプリの再生コントロールを残しつつ、ほかの宣伝通知を消す設定例です。

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

FilterBox で新しいルールを作成し、よく使う音楽アプリを選んで「高度なマッチモード」を選択し、上の JSON を貼り付ければ使えます。

構文

1 行ずつ説明します。

  "match": "NONE",

マッチモードです。ALL、ANY、NONE の 3 種類に対応しており、すべて大文字で書きます。

それぞれ、通知がすべてのノードにマッチ、いずれかのノードにマッチ、どのノードにもマッチしないときにフィルタされます。

  "node": [],

マッチさせるノードの配列です。数に制限はありません。

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

ノード:各ノードには field と regex の 2 つの項目が必要です。

regex は正規表現で、これにマッチするとそのノードがマッチしたことになります。

どの field が使えるかは、FilterBox のタイムラインで最近の通知を開き(メモリ節約のため、古い通知は消去されていることがあります)、「デバッグ情報」を選ぶと確認できます。

デバッグ情報の画面

このうち filterbox.field.XXX は FilterBox が設定する項目で、それ以外はすべて Notification#extras から読み取った値です。

扱いやすくするため、すべての値は文字列に変換されます。

ヒント

  • なぜ上のルールではノードを 2 つ使うのですか?

    多くのアプリ開発者は Android の開発ガイドラインに従い、標準の音楽通知(MediaStyle)を使っています。一部のアプリはシステムを使わず独自に画面を描画するため、filterbox.field.HAS_BIG_CONTENT_VIEW(独自の展開ビューがあるか)で判別します。どちらのノードにもマッチしない通知だけがフィルタされます。

  • JSON を手で書くと間違えやすいです。

    そのとおりです。カンマの抜けなどを防ぐため、JSON エディターの利用をおすすめします。たとえばオンラインの https://jsoneditoronline.org/ が使えます。