🚫

「LINEの内部ブラウザでYouTubeとか見れない状態」を作りたい、という試行錯誤(2日目)

に公開

やりたいこと

前回の記事はこちらです。

https://zenn.dev/esusaki/articles/50374f47bfdf9f

Androidスマホにおいて、「LINEの内部ブラウザでYouTubeとか見れない状態」を作ることを目標に、試行錯誤しています。
とりあえずMacroDroidというAndroidスマホの自動化アプリを使って出来ないか試している途中です。

やることは以下の3つです。

① LINEが起動しているか否か判定
② (LINEは起動しているという前提のもとで)LINEの内部ブラウザが起動しているか否か判定
③ LINEの内部ブラウザを閉じる

苦しみつつ作った前回のマクロがこちら↓です。

① LINEが起動しているか否か判定✅
② (LINEは起動しているという前提のもとで)LINEの内部ブラウザが起動しているか否か判定
③ LINEの内部ブラウザを閉じる

①まで出来たので、次は②からやろうと思います。(この部分がいちばん難関な気がしています...)

10分ごとに進捗を書きます。

10分経過

LINEの内部ブラウザが起動しているか否か判定する方法についてですが、今のところ、画面のUIの変化から、判定できたらいいなぁーと思っています。

「LINEの普段のトーク画面には無いが、LINEの内部ブラウザを見ているときには表示されるもの」としては、以下のような上下のメニューバー的なものが表示されます。

これの出現を感知して、ブロックしたい...と思うのですが、そんなややこしいことができるMacroDroidの機能、あるのだろうか...。

20分経過

以下の記事を参考に、「スクショのコンテンツ」をトリガーにすることができないか試しています。

https://kamonomichi.com/macrodroid-application/

「定期的に画面をスクショし、その中に特定の文字列が含まれていたら...」というトリガーです。
文字列より、アイコンなど画像が含まれていたら、というトリガーにできたら、もっと嬉しいのですが、記事を見る限り、そのようなトリガーはなさそうでした。悲。

以下のように実験用のマクロを作ってみました。

結果、それっぽく動く時もあるものの、動作が不安定でした。
トーク一覧画面にある文字には反応してくれるが、トーク画面の文字や、内部ブラウザのメニューバーにある文字には、反応してくれない、という感じでした。

内部ブラウザのメニューバーにある文字(以下の画像で囲んだ部分)の文字列に反応してくれないとなると、結構難しくなってくるぞ。。。

30分経過

私と同じようなところで詰まっており、そして詰まり続けていそう。

https://www.macrodroidforum.com/index.php?threads/画面の変化を捉えるコマンドを教えてください.1605/

40分経過

UIの変化の検知がなかなか厳しそうなので、UI以外の方法で検知できないか考えています。

https://haribote-macro-town.blog.jp/archives/30915736.html

「アクション」→「アプリ」→「アプリのアクティビティ」→「LINE」 で沢山アクティビティが表示されました。
名前から、こういう役割かな?って分かるような気もするけど、それぞれのアクティビティ名でググっても、一切情報が出てこない。。。

強いて言えばこれがブラウザ関連っぽいかな?と思い、「LiffActivity」というアクションを試しに実行してみたのですが、画面の見た目上は特に何も変化が起きませんでした。

これを使って内部ブラウザを閉じる、とかも難しそうです。シクシク。

50分経過

「アプリのアクティビティ」を使った方法は諦め、再び、UIの変化を検知する方法に戻ろうと思います。。

先ほど、以下のマクロでは、メニューバーにある文字列をうまく検知できてない?という部分で詰まってしまいました。

ですが、改めて試したら、検知できているときもありました。

トリガーは、「画面にgoogle.comという文字列が新たに表示されたら」動くものであり、「画面にgoogle.comという文字列が表示されつづけているときに」繰り返し一定間隔で実行されるようなものではない、という点を、自分が誤解していました。

よく見ると、「画面にgoogle.comという文字列が(存在しない状態から)新たに表示された」場合には、きちんと動作しているということが分かりました。

1時間経過

「画面にgoogle.comという文字列が(存在しない状態から)新たに表示された」場合に一度実行されるのではなく、
「画面にgoogle.comという文字列が表示されているときに」繰り返し一定間隔で実行されるようなマクロを作りたいので、以下のようにしました

内部ブラウザでGoogle以外を見ているときは、False

内部ブラウザでGoogleを見ているときは、True

このやり方だと、メニューバーの文字を、きっちり定期的な間隔で判定できてそうで、良さそうです

1時間10分経過

だいぶすごい見た目になってきました。

2時間くらい経過

没入しすぎて記録をサボっていたのですが、紆余曲折の末に、こんな感じになりました。

新たな変更点
1
旧:「画面に"Google", "YouTube"などの文字列が表示されている→内部ブラウザを見ている」という風に判断する
新:「画面に友達の名前や"トーク", "既読"などの文字列が表示されている→内部ブラウザを見ていない」という風に判断する

2
旧:「ばつボタンをクリックする」ことで、内部ブラウザを閉じる
新:「戻るボタンをクリックする」ことで、内部ブラウザを閉じる

3
旧:「ばつボタンを1回クリックする」
新:「戻るボタンを3回クリックする」

おわり

① LINEが起動しているか否か判定✅
② (LINEは起動しているという前提のもとで)LINEの内部ブラウザが起動しているか否か判定❔
③ LINEの内部ブラウザを閉じる✅

できたこと

・LINEが起動しているか判定できた...①
・LINEの内部ブラウザを閉じることができた...③
・UBhindなどのスマホ制限アプリと組み合わせてMacroDroidの設定をいじれなくすることで、LINEの内部ブラウザが見られない状態を固定化することができた
・テキトーではあるが、②の「LINEの内部ブラウザが起動しているか判定」も部分的にできた

できなかったこと

・②の「LINEの内部ブラウザが起動しているか判定」について、現状は、「画面に友達の名前や"トーク", "既読"などの文字列が表示されている→内部ブラウザを見ていない」という、素朴すぎる方法で、判定している。そのため、意図的に突破しようとしたら、全然突破できる感じの、ゆるい制限ではある。

どうすればもっと制限を強められるか

MacroDroidでは、「画面上に表示されている文字列の読み取り」はできるが、「画面上のUI・アイコンなどの読み取り」はできないようです。(例えば、この位置にハンバーガーボタンが表示されたら~みたいな条件分岐は、できないようです。)

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14233191669

なので、MacroDroidで、「内部ブラウザを開いているかどうか」の判定をしようとする場合、「画面上に表示されている文字列の読み取り」に頼るしかなく、今回の記事のような、あいまいさが残る感じの制限にならざるをえないかもしれないです...。
気が向いたらMacroDroid以外の方法を使った、内部ブラウザのブロックも、試してみたいと思います。

ひとまず以下の、ゆる制限マクロで、個人的には75点くらいの満足をしているので、しばらく使い続けてみたいと思います。

かなり誰得な記事ではありましたが、お読みいただきありがとうございました!
みなさん、アテンション・エコノミーと、戦いましょう!🔥

Discussion