画面を強制的にオン


回答:


339

ウェイクロックは使用しないでください

これには、アプリに追加の権限を与える必要があり、誤ってwake lockを保持したままにして、画面をオンのままにしておくバグが非常に簡単に発生します。

次のFLAG_KEEP_SCREEN_ONように、アクティビティのウィンドウで有効にできるwindowフラグを使用する方がはるかに優れていますonCreate()

@Override
protected void onCreate(Bundle icicle) {
    super.onCreate(icicle);

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

これにより、ウィンドウがフォアグラウンドにある間、およびウィンドウがフォアグラウンドにある間だけ、画面がオンのままになります。これは、この一般的な使用例を大幅に簡素化し、アプリが状態間を遷移するときに行う必要があるジャグリングを排除します。


5
デバイスがスリープ状態になるのを防ぎますか?もしそうなら、WAKE_LOCKの共通性は私に衝撃的な間違いを感じさせます!
Michael Cramer

32
はい、それは画面をオンに保ち、デバイスがスリープするのを防ぎます。
10

1
はい、適切なウィンドウAPIを使用してフラグを削除できます。何かが描画されることを心配する必要はありません。フレームワークは必要に応じてそれを行います。
2010

1
@hakbod:これは画面を生きたまま維持するために機能しますが、スリープ状態の画面についてはどうですか?
カビタ

5
@ KC202では、WindowManager.LayoutParams.FLAG_TURN_SCREEN_ONを使用して、ウィンドウが表示されているときに画面をオンにすることができます。また、FLAG_DISMISS_KEYGUARDやFLAG_SHOW_WHEN_LOCKEDとともに使用されることもよくあります。
ハックボット

34

この質問には@​​hackbodによるすでにすばらしい回答があります!

私はこの質問に2つの追加のソリューションで答えています!

既存のソリューション:

@Override
    protected void onCreate(Bundle icicle) {
        super.onCreate(icicle);    
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    }

追加のソリューション:

私たちは使うことができます keepScreenOn

1. implementation使用setKeepScreenOn() in java code

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // or any View (in case generated programmatically ) 
        View v = getLayoutInflater().inflate(R.layout.driver_home, null);

        v.setKeepScreenOn(true);
        setContentView(v);
       }

ドキュメントhttp://developer.android.com/reference/android/view/View.html#setKeepScreenOn(boolean)

2.追加keepScreenOnしますxml layout

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:keepScreenOn="true" >

ドキュメントhttp://developer.android.com/reference/android/view/View.html#attr_android%3akeepScreenOn

注(いくつかの便利なポイント):

1. それで使用するkeepScreenOn必要があるかどうかは関係ありませんMain/Root/Parent View child viewParent view

2.唯一の問題は、View's Visibility must be visibleそれ以外の場合は機能しないことです。


ノートがv.setKeepScreenOn(true);フルスクリーンdialogfragmentのためにそれを行うための唯一の方法であると思われる
ティム

16

別の解決策は、画面をオンに保つ必要があるビューにandroid:keepScreenOn="true"ドキュメント)を追加することです。

どのビューを維持し、どのビューを維持しないかに関して、もう少し詳細な制御が可能になります。この方法で、リソースファイルの設定を参照することもできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.