背景モード

背景モードは、Google TV と Android TV に組み込まれているスクリーンセーバーです。これの目的は、静止画像を長時間表示しないようにすることです。これは、画面の焼き付きの影響を受けやすい OLED などのディスプレイ技術において重要です。

ユーザーが操作しない状態が 10 分間続くと、OS はデバイスを常に背景モードに移行します。さらにユーザーが操作を行わない(デバイスの省エネ設定により定義される)と、OS は省エネモードに入り、ディスプレイの電源がオフになります。メディア再生アプリは、ユーザーがデバイスを操作しない場合(映画の視聴中など)でも、デバイスが背景モードに切り替わらないことがあります。

ユーザーが背景モードに入ってから 30 分以内にデバイスを操作した場合、背景モードになったときにアクティブだったアプリが復元されます。ユーザーが背景モードに入ってから 30 分以上後にデバイスを操作した場合は、ホーム画面に戻ります。デバイスが省エネモードのときに電源ボタンを使って起動すると、ホーム画面が表示されます。または、ユーザーが省エネモードのときに特定のアプリボタン(YouTube など)を使用してデバイスを起動すると、そのアプリに直接移動します。

メディアの再生に MediaSession を使用している場合、再生の開始時に暗黙的な部分的な wake lock が保持されます。再生を一時停止しても、この wake lock は解放されません。 つまり、デバイスは自動的に背景モードに切り替わりますが、その後は省エネモードには切り替わりません。ユーザーが背景モードに入ってから 30 分以内にデバイスを操作した場合、アプリは復元されます。

動画の再生

動画再生では、中断のない視聴エクスペリエンスを提供するために、ユーザーが開始した再生中にデバイスが背景モードに入るのを防ぐことが重要です。ただし、再生が停止または一時停止しているときに、デバイスが背景モードに移行することをアプリは防止してはなりません

オーディオの再生

音声再生の場合、非静止画像を含む独自のスクリーンセーバーを実装していない限り、アプリで再生中に背景モードを妨げないようにする必要があります。背景モードが有効になっている間は、音声の再生が継続されます。

Android でのオーディオ再生は、暗黙的に部分的な wake lock を保持します。これを行ってもデバイスが背景モードに移行するのを防ぐことはできませんが、その後に省エネモードに移行できないようにします。そのため、デバイスが背景モードに入った後も再生は続行されますが、中断なく再生できるよう、デバイスはスリープ状態にならないようにする必要があります。

背景モードの防止

OS がデバイスを背景モードにしないようにすることは可能ですが、背景モードの要件に沿って使用する必要があります。アプリ デベロッパーは、デバイスが省エネモードになるのを防止することはできません。

アプリで Window にフラグを設定することで、画面がオフにならないようにすることができます。

Kotlin

requireActivity().window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)

Java

requireActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

このフラグが設定されている場合、背景モードは無効になります。再度有効にするには、フラグをクリアする必要があります。

Kotlin

requireActivity().window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)

Java

requireActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);