AndroidでTaskerを使ってみる（基本）

# はじめに
Taskerとは、Android用の自動化ツールです。特定の条件やイベントが発生した時に、あらかじめ設定したアクションを自動的に実行させることができます。﻿


## 何ができるの？（動機）
もともとやりたかったこと。
- 自宅と外出時で自動的に設定を変更したい（WiFiのON/OFFなど）

# インストール編
## 導入環境・テスト環境
### 2025年5月6日時点
- OPPO Reno11 A / ColorOS 15
- Tasker 6.4.15
- Notification Listener 6.3.2
- CalendarTask 2.2.2

## Google Play ストアからの導入
Takerのみ有償。無償で使える範囲があるらしいが、最初から有償版を導入したので詳細は未調査。Notification ListenerやCalendarTaskは任意。自分のやりたいことに必要であればインストールすることになる。
### 2025年5月6日時点
- Tasker（380円）
- Notification Listener
- CalendarTask

## 設定状況（暫定）
正直なところ正解値は不明。自分の設定をメモ。
拒否にしている項目も、実行するアクションによって許可する必要があると思われる。スマホのベースがOPPO/ColorOSのため設定説明は独自表現の可能性あり。

### Tasker
- 位置情報の権限：常に許可
- 通知：通知を許可＋サイレントに設定
- 付近のデバイスの権限：許可
- バッテリー消費管理：バックグラウンドアクティビティの許可
- 特別なアプリへのアクセス
　システム設定を変更：許可
　デバイスとアプリの通知（へのアクセス）：許可
　使用状況へのアクセス：許可
　全てのファイルへのアクセス：許可
　NFC起動：許可
　Wi-Fiの管理：許可
　他のアプリの上に重ねて表示：許可

### Notification Listener（ここの解説では使わない）
- 通知：通知を許可＋サイレントに設定
- バッテリー消費管理：バックグラウンドアクティビティの許可
- 特別なアプリへのアクセス
　デバイスとアプリの通知（へのアクセス）：許可
　使用状況へのアクセス：拒否
　他のアプリの上に重ねて表示：許可

### CalendarTask（ここの解説では使わない）
- 通知：通知を許可＋サイレントに設定
- バッテリー消費管理：バックグラウンドアクティビティの許可
- 特別なアプリへのアクセス
　該当なし

# 設定編
## 概要
条件とアクションをプロファイルとして定義。基本的には簡単なIF/THEN構文だが、少し複雑な制御をさせようとすると多少のプログラミング知識は必要。

## 画面イメージ
![Screenshot_2025-05-06-20-14-17-23_78c564e752295d769e9a0ddd26e8199d.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4080052/98813ee7-f72e-4c65-af32-31ae6faae595.jpeg)

## サンプル1 自宅内外で環境設定を自動切り替え
### 基本設計
- 実装としてはシンプルに、自宅内 or 自宅外の判定を行い、都度環境設定を切り替える
- 変更する環境設定は、
  - 画面消灯までの猶予時間
  - マナーモードのON/OFF
 

### 基本設計の補足
- 自宅の内外判定は特定の無線LAN SSIDの接続状態を使う
- デバッグ等に有用なため、状態遷移として中間状態を踏ませる（具体的には変数操作を仲介させワンステップ増やす）
    - if <自宅の内外判定> then <変数の書き換え>
    - if <変数の内容変更> then <自宅内外のアクション実行>


### 設定1 タスク作成(状態管理用変数の操作)
状態管理のための変数操作を行うアクションを作成する。（小文字で始まる変数名はローカル変数らしいので、他から参照する変数は大文字で開始すること）
　%VHomeState = in / out
~~~
【タスクタブ】
1. 新規作成 (+) (CREATE) >> タスク名「変数操作_自宅内」
2. アクション追加 (+) >> アクションカテゴリ/変数 >> 変数を設定(Variable Set) 
3. アクション編集
　名前：%VHomeState
　これに：in
　<設定完了>
~~~
次に
~~~
【タスクタブ】
1. 新規作成 (+) (CREATE) >> タスク名「変数操作_自宅外」
2. アクション追加 (+) >> アクションカテゴリ/変数 >> 変数を設定(Variable Set) 
3. アクション編集
　名前：%VHomeState
　これに：out
　<設定完了>
~~~

### 設定2 タスク作成(環境変化時に発生させる実際のアクション)
具体的に実施させたいアクションを定義。ハードウェアやOSに依存するような一部のアクションは機種依存となる可能性有り。
フラッシュ表示とは、画面下に任意の文字列をポップアップで表示するアクション。

【自宅内アクションの定義】
~~~
【タスクタブ】
1. 新規作成 (+) (CREATE) >> タスク名「ACT_自宅内」

2-1. アクション追加 (+) >> アクションカテゴリ/画面 >> 画面消灯までの時間(Display Timeout) 
2-2. アクション編集
　2分
　<設定完了>

3-1. アクション追加 (+) >> アクションカテゴリ/オーディオ >> マナーモード解除(Sound Mode) 
3-2. アクション編集
　モード：サウンド
　<設定完了>

4-1. アクション追加 (+) >> アクションカテゴリ/アラート >> バイブ（振動）(Vibrate) 
4-2. アクション編集
　時間：200 (ms)
　<設定完了>

5-1. アクション追加 (+) >> アクションカテゴリ/アラート >> フラッシュ表示(Flash) 
5-2. アクション編集
　文字：State inside
　<設定完了>
~~~
ただし、画面消灯までの時間(Display Timeout)については、機能しないのは確認済み。OPPO Reno11 Aでは該当項目の設定変更時に設定承認が入るようになり、この確認が暗黙承認できないため変更できないものと思われる。（OPPO Reno7 Aでは設定承認はなく機能していた）

マナーモード解除(Sound Mode) の設定については、OPPO Reno11 Aでは上部の着信音/振動する/マナーの部分が変わる。（こちらは期待値通り）
![Screenshot_2025-05-24-16-13-09-73_fc704e6b13c4fb26bf5e411f75da84f2_03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4080052/41c0b1b1-e031-467c-af41-d05a93503971.jpeg)



【自宅外アクションの定義】
~~~
【タスクタブ】 
1. 新規作成 (+) (CREATE) >> タスク名「ACT_自宅外」

2-1. アクション追加 (+) >> アクションカテゴリ/画面 >> 画面消灯までの時間(Display Timeout) 
2-2. アクション編集
　1分
　<設定完了>

3-1. アクション追加 (+) >> アクションカテゴリ/オーディオ >> マナーモード解除(Sound Mode) 
3-2. アクション編集
　モード：オフ
　<設定完了>

4-1. アクション追加 (+) >> アクションカテゴリ/アラート >> バイブ（振動）(Vibrate) 
4-2. アクション編集
　時間：200 (ms)
　<設定完了>

5-1. アクション追加 (+) >> アクションカテゴリ/アラート >> フラッシュ表示(Flash) 
5-2. アクション編集
　文字：State outside
　<設定完了>
~~~

### 設定3 プロファイル作成(変数操作で状態遷移させるプロファイル)

【自宅内判定のプロファイル】
~~~
【プロファイルタブ】
1. 新規作成 (+) (CREATE)
2. 発動条件/状態 >> 状態カテゴリー/ネット通信 >> WiFi接続 
3. 状態の編集
　SSID：虫眼鏡のアイコンから自宅で常用しているSSIDを選択（あるいは手入力）
　アクティブ：はい
　反転：チェックなし
　<設定完了>
4. プロファイルのアクション（矢印右側の欄を長押し）を作成済みの「変数操作_自宅内」を指定
5. プロファイル名を長押し、プロファイル名を変更「自宅内判定」
6. 右端の有効/無効スイッチは、有効にする
~~~

【自宅外判定のプロファイル】
~~~
【プロファイルタブ】
1. 新規作成 (+) (CREATE)
2. 発動条件/状態 >> 状態カテゴリー/ネット通信 >> WiFi接続 
3. 状態の編集
　SSID：虫眼鏡のアイコンから自宅で常用しているSSIDを選択（あるいは手入力）
　アクティブ：はい
　反転：チェックあり
　<設定完了>
4. プロファイルのアクション（矢印右側の欄を長押し）を作成済みの「変数操作_自宅外」を指定
5. プロファイル名を長押し、プロファイル名を変更「自宅外判定」
6. 右端の有効/無効スイッチは、有効にする
~~~

### 設定4 プロファイル作成(変数をトリガに実際のアクションを発動するプロファイル)

【自宅内アクションを実行するプロファイル】
WiFiの状態を直接参照するのではなく、変数%VHomeStateの内容変化を発動条件としワンステップ経由する形で定義している。（デバッグ等に有用）
~~~
【プロファイルタブ】
1. 新規作成 (+) (CREATE)
2. 発動条件/状態 >> 状態カテゴリー/変数 >> 変数の値 
3. 状態の編集
　条件：%VHomeState
　演算：～（が一致する（パターン可））
　値：in
　<設定完了>
4. プロファイルのアクション（矢印右側の欄を長押し）を作成済みの「ACT_自宅内」を指定
5. プロファイル名を長押し、プロファイル名の変更「自宅内アクション実行」
6. 右端の有効/無効スイッチは、有効にする
~~~

【自宅外アクションを実行するプロファイル】
WiFiの状態を直接参照するのではなく、変数%VHomeStateの内容変化を発動条件としワンステップ経由する形で定義している。
~~~
【プロファイルタブ】
1. 新規作成 (+) (CREATE)
2. 発動条件/状態 >> 状態カテゴリー/変数 >> 変数の値 
3. 状態の編集
　条件：%VHomeState
　演算：～（が一致する（パターン可））
　値：out
　<設定完了>
4. プロファイルのアクション（矢印右側の欄を長押し）を作成済みの「ACT_自宅外」を指定
5. プロファイル名を長押し、プロファイル名の変更「自宅外アクション実行」
6. 右端の有効/無効スイッチは、有効にする
~~~

### 設定完了後
画面右上のチェックマークを押して適用する


基本的には以上となります。
Taskerの変数タブで今回作成した変数%VHomeStateの内部値を確認できるので、実際に発生条件を満たしたときに変数がどういった状態になっているか容易に確認することができます。