2024年2月6日火曜日

デュアルSIMを自動切り替えする方法(Tasker)

メイン回線のデータ使用上限をこえたらサブ回線に自動的に切り替えるTaskerレシピを作ってみた。

環境

  • Tasker
  • Notification Listener
  • Tasker Permission (再起動ごとに実行する必要あり)

プロファイル

モバイルネットワークのデータ使用警告通知をトリガーにする。

トリガー

イベント > プラグイン > Notification Listener

Notification Listener 設定
  • Notification event : Post
  • Apps : Android
  • Titile : データ警告

タスク

  1. Taskerの機能 : CheckADBWifi()
  2. 通知を表示
    タイトル : 切り替え失敗
    IF条件 : %has_adb_wifi eq false
  3. 停止
    IF条件 : %has_adb_wifi eq false
  4. ADB Wifi
    コマンド : isub.getEnabledSubscriptionId(1)
    ※()内の数字はSIMスロット1が0,スロット2が1
  5. 変数を設定 : %sub_idに%aw_output
  6. ADB Wifi
    コマンド : isub.setDefaultDataSubId(%sub_id)
  7. 通知を表示
    タイトル : 切り替え完了

使用方法

 SIMの切り替えにADB wifiを利用するので、予めTasker Permissionで権限を与えておく。この作業は初回時と、端末の再起動ごとに行う必要があり少しめんどくさい。次にメイン回線でデータ警告する容量を設定すると、その通信量を超えたときに通知が来てトリガーとなる。

課題

このレシピでもほぼ期待通りの動作はするがデータ超過警告は1回しか通知されないため、手動で切り替えたときの戻し忘れが発生する可能性がある。本来なら、「Wifi切断時にデータ使用量を取得して、それが規定値をこえていればSIMを切り替える」というようにすると確実になるが、データ使用量を取得する方法がいまいちわからなかったので断念。
(Java関数のTrafficStats.getMobileRxBytes()を使うという手もあるが、デバイスが起動してからの通信量しか取得できない上、SIMごとの通信量は取得できない。)
もう一つの問題は、再起動のたびにADB wifiの権限をあたえる必要があることだ。一応Tasker + Termuxで自動化できるらしいが、何回試してもうまくいかなかったのでこちらも一旦諦めることにした。権限をあたえる操作自体は簡単だが、PC必須というのがなんともめんどくさすぎる。

0 件のコメント:

コメントを投稿