以前、累積時間に応じて煽ったり、ランダムパスコードをアプリにかける寝落ち対策に使えるオートメーションを作りました.
しかしこれらはちょっと作るのが大変です.
なので今回はもうちょっと簡単なものを作ってみます.
※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.
スポンサーリンク
仕組み
今回のアイデアには「ショートカットの名前を変更」アクションを使います.
ショートカットはレシピの名前を検索するだけでなく変更もレシピ内で可能なので、アプリを開いてから指定時間内に変化があるかどうかでホーム画面に戻すなどすることで擬似的に寝落ち対策になります.
レシピ
まずはレシピからです.
レシピを実行して時間の変化を見るために手っ取り早いのはレシピの名前に日時を入れてしまうことです.
もちろんメモやファイル、Data Jarなどに書き込んで読んでもいいんですが、この方法なら不要になります.
「テキスト」アクションにこのレシピの名前(今回は"Renamable Recipe"としています)に続いて現在の日時を入れておきます.
仕様上秒数が欲しいので、秒を含むフォーマットにしておきます.
続いて「マイショートカットを取得」アクションでこのレシピを取得します.
ここでこのレシピを「すべてのショートカット」上で作ったままだと特定するのに時間がかかります.
なので予め専用のフォルダを作ってこのレシピだけ入れておき、その上で「ファイルにフィルタを適用」でこのレシピの名前でフィルタすることで可能な限り素早く、確実に取得します.
この結果に対して「ショートカットの名前を変更」アクションで、最初の「テキスト」を名前として変更します.
このアクションはオプションの「実行時に聞く」がオンになっているので、必ずオフにしましょう.
レシピをコントロールセンターに追加
今回、制限時間内にタップさせる手段としてコントロールセンターを使います.
アプリを開いたらコントロールセンターが開き、時間内にタップしたらOK…という流れです.
コントロールセンターを開き、空いた部分を長押しして出てきた「コントロールを追加」をタップします.
「ショートカット」を見つけてタップし、「選択」から今回作ったレシピを選びます.
位置と形を決めたら完了です.
オートメーション
次はオートメーションです.
ショートカットアプリの「オートメーション」から「アプリ」を選択します.
希望のアプリを選択し、「開いている」のみにチェックが入った状態にしておき、「すぐに実行」にチェックして次へ進み、「新規の空のオートメーション」を選択します.
空のオートメーションにアクションを追加していきます.
まず最初に作ったレシピを実行させたいので「コントロールセンターを表示」でコントロールセンターを表示させます.
またタップするまでの猶予を「待機」で何秒か待たせます(画像では10秒).
待機が終わった時点での時刻を変数に起きます(今回は"current").
コントロールセンターに追加したレシピにはタップした時点での時刻が書かれており、オートメーションが発火して(今回は)おおよそ10秒後の時刻が分かったので、この差がどうなっているかでタップが間に合ったかどうかを判別できますね.
最初に作ったレシピの名前に書かれているであろう日付を取り出します.
専用のフォルダに入れてあると思うので、「マイショートカットを取得」でそのフォルダを指定し、念の為レシピ名で更に絞っておきます.
この結果に対して「入力から日付を取得」で時刻を取り出します.
ただ、一度目だけは時刻は明らかに入っていません.
それに何らかの理由で日付をレシピ名から取り除いてしまったかもしれません.
いずれにしろ何らかの理由でレシピ名に時刻がない可能性があるので、このまま時刻間の秒数を計算するわけにはいきません.
というわけで面倒ですが場合分けをします.
取得したつもりの日付が存在しない場合、とりあえず適当なフラグを立てておきます.
このif文の「その他の場合」は時刻が含まれていることを意味するので、制限時間内にタップできなかった場合のフラグを立てるのに使えますね.
取得した時刻を"before"とでも名付けておき、「日付間の時間を取得」で秒数を取り出します.
これが指定の数を超えていた倍は同じフラグを立てます、どのくらいが適切かは機種の性能や劣化具合で多少異なると思います(画像では30にしています).
これで制限時間内に間に合わなかった場合とそもそも時刻が記載されていなかった場合だけフラグが立ちました.
問題なかった場合はフラグとして用意した変数に値すら入っていません.
というわけで上で処理したフラグに応じて対応を分けます.
フラグが立っている(任意の値)場合は制限時間内にタップできなかったかそもそも時刻が書かれていないということなので時間外判定です.
なので例えば画像のようにその旨を通知し、好みで数秒待機してからホーム画面に移動したり、いっそロック画面に移動するなどします.
フラグが立っていない場合は時間内にタップできたということなので、その旨を通知するか、いっそ何もアクションを入れずスルーします.
すべての処理が終わったら、コントロールセンターは用済みなので閉じます.
実行
オートメーションで指定したアプリを開くと、コントロールセンターが開くので時間内に今回作ったレシピをタップします.
時間内にタップできなければ指定秒後にホーム画面に戻ったりロックされます.
間に合えばそのまま使えます.
〆
オートメーション側のアクション数がちょっと多めですが、if文などの入れ子があるわけでもないのでそこまでの難易度ではないと思います.
このままだと一日いつアプリを開いてもオートメーションが発火してタップすることを強いられてしまうので、if文で全体を覆って時間を絞るなどしましょう.