Android 11 では、連続スリープは省電力機能であり、ウェイクロックが保持されている場合でも、ユーザーがアイドル状態になると、デバイスがスリープ状態になるまでの時間を設定できます。タイムアウトが期限切れになると、ユーザーがデバイスを操作するとスリープ状態にならなくなることを示すメッセージが表示されます。
このコンテキストで、ユーザー アクティビティとは、(USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS
フラグを含まない)PowerManager#userActivity
を呼び出す呼び出しを指します。これには次のものが含まれます。
タッチスクリーンの操作
物理的なボタンを押す
外部アクセサリ(入力キーボード、Bluetooth リモコン、IR リモコンなど)からの入力イベント
音声インタラクション
One Touch Play などの特定の HDMI CEC メッセージを受信する
新しいキャスト セッションを開始する
カスタマイズ
この機能を有効にすると、指定した時間操作がないと、デバイスに画面上の警告が表示されます。何もしない場合、デバイスはスリープ状態になります。構成オプションを使用して機能をカスタマイズできます。
注意: 同様の省電力機能がすでに実装されている場合、この機能を有効にすると、警告 UI の重複するなどの意図しない結果を招く可能性があります。タイムアウトの構成
タイムアウトを構成するには、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
操作が長時間行われない場合にデバイスがスリープ状態になるまでの時間を警告メッセージに表示する期間。
この値は、設定したスリープ タイムアウトを大幅に下回る必要があります。そうでない場合、警告ダイアログは常に表示され、終了できません。
デフォルト
TvSettings のタイムアウト設定を表示しています
タイムアウト設定を表示するには、packages/apps/TvSettings/Settings/res/values/config.xml
の次の要素を更新します。
config_show_standby_timeout
メディアの再生中に設定画面を非表示にできる設定アイテムを表示するかどうかを指定します。
デフォルト
警告 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
動画の再生を開始します(ウェイクロックを取得)。
スリープ警告ダイアログが数秒後に表示されることを確認します。
設定したタイムアウト時間後にデバイスがスリープ状態になることを確認します。