見出し画像

[KLWP] 常駐している通知から必要な情報を抽出する

はじめに

きっかけは今日の使用通信量をホーム画面に置いておきたいなと考えたことである。

実際に作ったホーム画面


KLWPではts関数というもので通信量を測定することが出来ることはご存知だろうか。
しかし、再起動すると使用通信量がリセットされてしまう仕様のせいで全く使い物にならない。
そんな時、通知欄に常駐させている通信量モニターから情報を取得できないかと考えた結果、好きな情報をどんな状況でも取得出来るようになったので備忘録として残す。
通信量に限らず、天気など好きな情報を取得できるし、書き方を変えればソシャゲのスタミナ回復通知など1回きりの通知も取得できると思うので是非参考にして欲しい。

実際のコード

前置きが長ったらしかったのでさっさと作ったコードを掲載する。

$ni(s+tc(count,tc(split,fl(0,ni(scount)-1, "i+1", "ni(s+i, app)",#*#),"モニター",0),#*#),title)$

実際のコード


取得対象の通知

以上のコードは4重の入れ子によって構成されているためここからはそれぞれ何を行っているのかを解説する。

FL関数の入れ子

fl(0,ni(scount)-1, "i+1", "ni(s+i, app)",#*#)
ここではFL関数 所謂forループを利用して全ての通知のアプリ名を一覧で表示している。日本語で表すと
「0番目から常駐通知の数-1番目まで 常駐通知の〇番目のアプリ名を#*#で区切って表示することを繰り返す」
となる。0から始まっているのはプログラミングでは物の数え方が0からスタートし、常駐通知の〇番目もそのルールに乗っ取って初めが0番目だからである。
これによりどのようなテキストが得られるかと言うと
充電アプリ#*#天気アプリ#*#通信量モニター#*#ランチャーアプリ
と言った感じだろうか。もちろん常駐通知は勝手に消えたり増えたりするのでリアルタイムの通知状況が表示されているはずである。
このまま次の入れ子に進む。

tc(split)関数の入れ子

tc(split,[入れ子のテキスト],"今日",0)
ここでは欲しい情報がどこか判別してその場所を特定ということを行っている。上記のテキストの中で必要な情報は「通信量モニター」である。なので、「モニター」で区切って前だけ残して後ろは切り捨てる。(誤判定されないようにもっと詳しく書くべきではあるが)
充電アプリ#*#天気アプリ#*#通信量モニター
するとテキストはこうなる では次の段階に進む。

tc(count)関数の入れ子

tc(count,[入れ子のテキスト],#*#)
ここでは通知が何番目にあったかの情報を調べたい。ここで前の入れ子でどこにあったか判別して切り取った意味が出てくる。切り取ったテキストから区切り文字である#*#(なんでも良いが通知の内容とダブらないものであること)を数えればその数が何番目にあったかの情報となる。
前テキストを見てもらうとわかるが#*#は2個あった。最初に数え方は0番目から始まると言ったが、通信量モニターは今回その数え方で行くと2番目にあることが分かる。これは他の場所、例えば先頭や最後尾にあった場合でももちろん同じことが言える。これにより、ここで必要な情報が一体何番目に記載されているのかのデータが取れた。最後の入れ子に進む。

ni関数の入れ子

ni(s+[何番目かのデータ],title)
ここまで来ればもう簡単である。通知を取得するni関数に2番目にある通知のタイトルを取得させるだけである。
ちなみにKLWPの「+」には数字どうしの足し算を行うだけでなく文字同士をくっつける効果もあるので、普段ならs2と書けばいいところだが、今回のように常駐であることを示すsの後ろに何番目かのデータを関数で表示したい場合は+でくっつける必要がある。

最後に

このようにすることで例えば充電を終えて充電中のアプリが通知欄から消えたとしても即座に通信量モニターの場所を判定し直して情報を提供し続けてくれるため、通知欄に常駐できる情報はいつでも取得できるようになった。
余談だが、Yahoo天気のRSSのサービスが終了し、情報取得が困難になっている。これからは通知欄に天気アプリを常駐させてそこから情報を取得するのが最も手軽なのかもしれない。

この記事が気に入ったらサポートをしてみませんか?