ゲームや映画アプリなど、一部のアプリでは画面をオンにしておく必要があります。一部の Android API は、画面を自動的にオンに保ちます。それ以外の場合は、Compose 修飾子を使用するか、フラグを設定して、画面をオンのままにすることができます。
Compose で画面をオンのままにする
アプリで Jetpack Compose を使用している場合は、コンポーザブルに keepScreenOn 修飾子を適用します。この修飾子は Compose UI 1.9.0 以降で使用できます。修飾子がコンポジションの一部である限り、画面はオンのままになります。修飾子を使用するコンポーザブルがなくなると、Compose は画面を自動的にオンに保つのを停止します。
画面を一部の時間のみオンにするには、修飾子を条件付きで適用します。次の例では、動画の再生中のみ画面をオンにしています。
@Composable fun VideoPlayer(isPlaying: Boolean, modifier: Modifier = Modifier) { Box( modifier = modifier // Keep the screen on only while the video plays. .then(if (isPlaying) Modifier.keepScreenOn() else Modifier) ) { // Video surface and playback controls. } }
この修飾子は、次のセクションで説明する android:keepScreenOn 属性と同じビュー プロパティを設定するため、アプリのウィンドウが表示されている間のみ画面がオンになります。アプリがウィンドウに設定した FLAG_KEEP_SCREEN_ON フラグはクリアされません。
画面を手動でオンのままにする
デバイスの画面をオンのままにするには、アクティビティで FLAG_KEEP_SCREEN_ON フラグを設定します。このフラグはアクティビティでのみ設定できます。サービスや他のアプリ コンポーネントでは設定できません。次に例を示します。
class MainActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) } }
画面をオンのままにするもう 1 つの方法は、アプリのレイアウト XML ファイルで android:keepScreenOn 属性を設定することです。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:keepScreenOn="true"> ... </RelativeLayout>
android:keepScreenOn="true" を使用することは、FLAG_KEEP_SCREEN_ON を使用することと同等です。どちらの方法でも、アプリに最適な方法を使用できます。アクティビティでプログラムによってフラグを設定する利点は、後でプログラムによってフラグをクリアして画面をオフにできることです。
FLAG_KEEP_SCREEN_ON フラグが設定されたアプリがバックグラウンドに移動すると、システムは画面を通常どおりオフにできます。この場合、フラグを明示的にクリアする必要はありません。アプリで画面をオンにしておく必要がなくなったら、clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) を呼び出してフラグをクリアする必要があります。
テレビの背景モード
テレビデバイスでは、動画再生中にデバイスが背景モードに移行しないように、FLAG_KEEP_SCREEN_ON を使用します。フォアグラウンド アクティビティで FLAG_KEEP_SCREEN_ON が設定されていない場合、一定時間操作がないと、デバイスは自動的に常に画面表示モードに切り替わります。