Android 11 では、不注意によるスリープは省電力機能であり、 FLAG_KEEP_SCREEN_ON
のウィンドウが表示されている場合や、 FULL_WAKE_LOCK
、 SCREEN_BRIGHT_WAKE_LOCK
またはSCREEN_DIM_WAKE_LOCK
レベルのウェイクロックが保持されている場合でも、ユーザーの非アクティブ タイムアウトを設定してから画面がオフになるように設定できます。レベルPARTIAL_WAKE_LOCK
のウェイクロックは、この機能の影響を受けません。タイムアウトが期限切れになる直前に、ユーザーがデバイスと対話しないとデバイスがスリープ状態になることをユーザーに警告するメッセージが表示されます。
このコンテキストでは、ユーザー アクティビティとは、 PowerManager#userActivity
( USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS
フラグなし) への呼び出しをトリガーするあらゆるものを指します。これには次のものが含まれますが、これらに限定されません。
- タッチスクリーンの操作
- 物理ボタンを押す
- 外部アクセサリからの入力イベント (接続されたキーボード、Bluetooth リモコン、IR リモコンなど)
- 音声インタラクション
- One Touch Play などの特定の HDMI CEC メッセージの受信
- 新しいキャスト セッションの開始
カスタマイズ
この機能が有効になっている場合、ユーザーが非アクティブになってから指定された時間が経過すると、デバイスは画面上に警告を表示します。何も操作しないと、画面がオフになります。これらの構成オプションを使用して機能をカスタマイズできます。
タイムアウトを構成する
タイムアウトを構成するには、 frameworks/base/core/res/res/values/config.xml
の次の要素を更新します。
-
config_attentiveTimeout
- ユーザーが非アクティブになってから画面がオフになるまでのデフォルト時間をミリ秒単位で指定します (画面ウェイクロックが設定されている場合でも)。
- ビルド時に設定します。
- 値が
0
からconfig_minimumScreenOffTimeout
の間の場合、デバイスが起動直後に画面をオフにしないように、タイムアウトはconfig_minimumScreenOffTimeout
に設定されます。 - デフォルト:
-1
、この機能を無効にします。
デフォルトのタイムアウトをオーバーライドする
デフォルトのタイムアウト設定をオーバーライドするには、次の要素を更新します。
-
Settings.Secure.ATTENTIVE_TIMEOUT
- 設定すると、
config_attentiveTimeout
で設定されたデフォルトの不注意スリープ タイムアウトがオーバーライドされます。 - 実行時に設定できます。
警告が表示されるまでの時間を設定する
期間を構成するには、 frameworks/base/core/res/res/values/config.xml
内の次の要素を更新します。
-
config_attentiveWarningDuration
- ユーザーが長時間非アクティブになった後、画面がオフになるまでにユーザーに警告メッセージを表示する時間。
- この値は、設定された不注意スリープ タイムアウトよりも十分に低い値である必要があります。そうでない場合は、警告ダイアログが常に表示され、閉じることができません。
- デフォルト:
30000
(30 秒)。
TvSettings でタイムアウト設定を表示する
タイムアウト設定を表示するには、 packages/apps/TvSettings/Settings/res/values/config.xml
内の次の要素を更新します。
-
config_show_standby_timeout
- メディアの再生中に画面をオフにすることを許可する設定項目を表示するかどうか。
- デフォルト:
false
。
警告 UI のリソース
- 警告ダイアログのレイアウトは
frameworks/base/packages/SystemUI/res/layout/inattentive_sleep_warning.xml
で定義されています。 - ダイアログの次の文字列
frameworks/base/packages/SystemUI/res/values/strings.xml
およびframeworks/base/packages/SystemUI/res-product/values/strings.xml
で定義されています。 -
inattentive_sleep_warning_title
-
inattentive_sleep_warning_message
ビルド時の構成とリソースは、リソース オーバーレイによって変更できます。
実装
以下を使用して機能を有効にします。
- デフォルトの
config_attentiveTimeout
をオーバーライドします。 - AOSP
TvSettings
使用する場合: -
config_show_standby_timeout
をオーバーライドして、設定でこの機能を無効にします。 -
Settings.Secure.ATTENTIVE_TIMEOUT
を設定する独自の設定を実装します。
検証
この機能の CTS テストはcts/hostsidetests/os/src/android/os/cts/InattentiveSleepTests.java
にあります。
例とソース
frameworks/base/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.java
には、デフォルトの警告 UI 実装が含まれています。-
packages/apps/TvSettings
設定で機能を公開する方法の例が示されています。
手動テストケースの例
デバイスの正常性 HAL がデバイスにバッテリーがある (
battery_present
がtrue
) と報告する場合は、開発者設定stay_on_while_plugged_in
がオフになっていることを確認してください。これにより、機能が画面をオフにできなくなる可能性があります。
adb shell settings put global stay_on_while_plugged_in 0
- 不注意によるスリープのタイムアウトを、警告ダイアログの継続時間より数秒長く設定します。
adb shell settings put secure attentive_timeout 32000
- ビデオの再生を開始します (画面ウェイクロックを取得するため)。
- 数秒後にスリープ警告ダイアログが表示されることを確認します。
- 設定されたタイムアウトが経過すると画面がオフになることを確認します。