Androidはアプリの実行中に画面のタイムアウトを無効にする


116

アプリの実行中にスクリーンセーバーを無効にする方法はありますか?

画面を暗くすることは私が言いたいことです。


3
View.setKeepScreenOn()[リンク] [1]の使用についてはどうですか?自分で使ったことはありません。[1]:developer.android.com/reference/android/view/...
dorzey


回答:


172

あなたはこのようなものを使いたいです:

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

4
これは、実行中のアクティビティ用ですか、それともアプリ全体用ですか?
Muhammed Refaat 2014年

@ MayurR.Amiparaええ、私はここがそうだと思います
Muhammed Refaat

1
このコードをApplicationクラスのonCreate()メソッドで記述した場合、アプリ全体で機能しますか?
Jayesh

いいえの場合、各アクティビティにその行を追加するのではなく、少ないコードを挿入することで、アプリの画面全体を維持するにはどうすればよいですか。
Jayesh

1
@Jayesh:baseActivityを作成し、このコードをonCreateメソッドで記述して、baseActivityからすべてのアクティビティを拡張できます。
maryam

102

私が使用した:

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

画面のタイムアウトを無効にし、

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

再度有効にします。


83

Googleが推奨するXMLの方法もあります。

<LinearLayout
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:keepScreenOn="true">

Googleスライドを確認してください-スライド16。

「忘れた場合、ウェイクロックはコストがかかります(...)正確性を確保するためにandroid:keepScreenOnの使用を検討してください」


2
リンクされたPDFを読む時間が無い人のために:「忘れられた場合、ウェイクロックは高価です」、「正確性を確保するためにandroid:keepScreenOnを使用することを検討してください」。
lenrok258 2016

2
@ lenrok258回答に追加;-)
neteinstein

使用PowerManager.newWakeLockgetWindow().addFlagsていて、何らかの理由で機能しませんでしたが、これは機能しました。
Benjamin Basmaci


3

下に行を追加するだけMainActivityで、アプリがライトをオフにすることはありません。

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

2

ビューでは、私の場合はSurfaceViewサブクラスで、画面を常にオンに設定できます。私はこのビューがまだものを描いている間、画面をそのままにしたかったのです。

public class MyCoolSurfaceView extends SurfaceView { 
@Override
protected void onAttachedToWindow (){
    super.onAttachedToWindow();
    this.setKeepScreenOn(true);
}

@Override
protected void onDetachedFromWindow(){
    super.onDetachedFromWindow();
    this.setKeepScreenOn(false);
}

1
これは実際には必要以上に複雑です。どこでもsetKeepsScreenOn(true)を呼び出すだけで、ウィンドウが表示されているときにフレームワークが自動的に画面をオンに保ちます。
ハックボット2012

1

これをonStartに配置します

    PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
    wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "no sleep");
    wakeLock.acquire();

そしてこれはあなたに現れます

    <uses-permission android:name="android.permission.WAKE_LOCK" />

することを忘れないでください

wakeLock.release();

onStopにて


1
PARTIAL_WAKE_LOCK画面をオフにすることができます。
マイケル

1

これはこれを解決する最良の方法です

 getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

なぜこの質問に答えるためにFLAG_FULLSCREENが必要なのですか?
Abdul Wasae


0
procedure SetSleep(aEnable:Boolean);
var
    vFlags: integer;
begin
    vFlags := TJWindowManager_LayoutParams.JavaClass.FLAG_TURN_SCREEN_ON or
        TJWindowManager_LayoutParams.JavaClass.FLAG_DISMISS_KEYGUARD or
        TJWindowManager_LayoutParams.JavaClass.FLAG_SHOW_WHEN_LOCKED or
        TJWindowManager_LayoutParams.JavaClass.FLAG_KEEP_SCREEN_ON;

    if aEnable then
    begin
      CallInUIThread (   // uses FMX.Helpers.Android
      procedure
      begin
        TAndroidHelper.Activity.getWindow.setFlags (vFlags, vFlags);
      end );
    end
    else
      CallInUIThread (
      procedure
      begin
        TAndroidHelper.Activity.getWindow.clearFlags (vFlags);
      end );
end;

0

1.getWindow()。addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);は、ネイティブAndroidに最適なソリューションです。
2. React androidアプリケーションを使用する場合は、以下のコードを使用してください。

@ReactMethod
    public void activate() {
        final Activity activity = getCurrentActivity();
        if (activity != null) {
            activity.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
                }
            });
        }

    }

-1

これは、ウェイクロックを取得することで実行できます。

私はそれを自分自身をテストしなかったが、ここで、この上に小さなチュートリアルです。


10
ダメダメダメ。ウェイクロックは簡単に誤用され、慎重に使用しないとユーザーのバッテリーを消耗する可能性があります。Use View#setKeepScreenOnまたはそれに相当するxmlレイアウト属性android:keepScreenOn="true"
adamp

5
@adamp:OPは、アプリがアクティビティであるかサービスであるかを示していませんでした。アクティビティは、引用するメカニズムを使用する必要があります。サービスはを使用する必要がありWakeLockます。
CommonsWare 2010年

サービスではありません。これは画像ビューアに似ており、画面を暗くしたくありません。
2010年

@adamp:あなたの言及android:keepScreenOn="true"は、私の意見では活動に対する唯一の有効な回答です。どうしても必要な場合を除き、ウェイロックから離れてください。
pauluss86 2012

アクティビティだけでなく、ウィンドウを表示するあらゆる種類のUI。対応するウィンドウフラグの使用について受け入れられた回答も同様に有効です。
アンプ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.