個人的なペットプロジェクトで作っているToDoアプリのために、アプリケーションを表示しているうちは画面スリープさせない機能が欲しくなった。
(入力内容を考えている間にロックされないように)
Forgeにあるプラグインで実現できたのでメモ。
以下の情報は2022/8頭頃のもの。
履歴
2022/08/22 OnApplicationReadyでKeepAwakeを追記
環境
Personal Environment(Version 11.16.0 (Build 35766))
Service Studio(Version 11.53.7)
Insomnia Plugin (Version 1.0.0)
Android (機種名 SH-M08 Android バージョン 10)
今回はiOSの開発用ライセンスが切れてしまったのでAndroidのみで確認。
Forgeコンポーネント
評価と選択
この機能を実現するプラグインは、(見つけた範囲では)Forgeに2つ登録されていた。
KeepAwake PluginとInsomnia Plugin。
実体は、
- 同じCordovaの同じバージョンをラップしている
- 提供するAction構成が同じ
- 内部的に呼んでいるCordova PluginのAPIも同じ
- 使い方も同じ
- OutSystems 10向けに作られたかなり古いモジュールである点も同じ
とほぼ同じモジュールといってもよい。
- License Blockを含んでいる
- User Provider moduleの設定がおかしくない
- Common Pluginへの参照を含んでいない
という点で、Insomniaの方が良さそうなのでこちらで実装を確認してみる。
KeepAwake Plugin
URL
https://www.outsystems.com/forge/component-overview/1743/keepawake-plugin
最終更新
2016/12/23
Version
1.0.1
オリジナルのプラグイン
https://github.com/EddyVerbruggen/Insomnia-PhoneGap-Plugin#4.2.0
MITライセンス
注意点
Common PluginのError Structureを参照しているため、インストール時にNot compatibleになる。
User Provider moduleとして(Current eSpace)を指定してあるのは多分間違い。
最終更新の日付からも明らかなようにOutSystems 10で作られたモジュール。
License Blockを含まない。
Insomnia Plugin
URL
https://www.outsystems.com/forge/component-overview/1740/insomnia-plugin
最終更新
2016/12/22
Version
1.0.0
オリジナルのプラグイン
https://github.com/EddyVerbruggen/Insomnia-PhoneGap-Plugin#4.2.0
KeepAwakeと同じ。
注意点
最終更新の日付からも明らかなようにOutSystems 10で作られたモジュール。
使い方
参照
Consumerとなるモバイルアプリケーションから、Insomnia Pluginの全要素を参照する。
実装
スリープさせないようにしたいScreenのOnInitializeで以下のように実装する。
KeepAwake Actionを読んだ時点から、アプリケーションの操作中はスリープしなくなる。
再びスリープさせたいときは、AllowSleepAgain Actionを呼べば良い。
実験したところ、どうもKeepAwakeは特定の画面のみに聞くわけではなさそう。スリープさせたい画面があるときは、AllowSleepAgainを忘れずに呼ぶ必要がありそう。
License ScreenのPlaceholderにPluginに含まれるLicense Blockを配置する。
(追記)OnApplicationReadyでKeepAwake
書き忘れていたので追記。
アプリケーション全体で、使用中はスリープさせたくない場合は、System EventのOn Application ReadyのタイミングでKeepAwake Actionを実行するのが自然。
On Application Readyのタイミングで動作するActionを作るには、Client Actionsフォルダを右クリック → Add System Event → On Application Readyを選ぶ。
注意
オリジナルのCordova PluginのQuirksの項に
on iOS the app would fall asleep after the Camera has been used, even if you previously called keepAwake. A similar issue on Android where the photo library was accessed during app usage.
というのがあるので注意。
(iOSではカメラを使ったあとで、Androidではフォトライブラリにアクセスした後で、再びSleepするようになる現象がある、という意味)。
こういうイベントが起こったあとは、再びKeepAwakeを呼ぶように気をつける。