web-dev-qa-db-ja.com

コードによるAndroidの自動画面ロックを防ぐ方法は?

私のアプリでは読み込みプロセスが長く、デバイスが画面ロックをかけると、何らかの理由でプロセスが停止します。

デバイスが自動画面ロックされないようにするにはどうすればよいですか?

22
Adam Varhegyi

この使用を宣言する必要があります-AndroidManifestの許可:

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

そしてあなたのコードでアクティビティ:

PowerManager powerManager = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
WakeLock wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Lock");
wakeLock.acquire();

これを行うことにより、アプリケーションが一時停止または破棄されたときに、このロックを解除することを忘れないでください。

wakeLock.release();

通常、onResume()内でacquireメソッドを呼び出すことをお勧めしますアクティビティとonPause()releaseメソッドのこのようにして、一時停止または再開した場合でもアプリケーションが正常に動作することを保証します。

20
Stefano Ortisi

マニフェストで許可を要求せずに画面ロックをオンに保つ別の方法は次のとおりです。

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

UIスレッドで長い読み込みプロセスを実行していますか?何かが正しくないようです。プロセスが長すぎて画面ロックがタイムアウトし、プロセスが終了する場合は、バックグラウンドサービスを使用する必要があります。

36
barry
KeyguardManager keyguardManager = (KeyguardManager)getSystemService(Activity.KEYGUARD_SERVICE);
KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE);
lock.disableKeyguard();

androidmanifestで:

<uses-permission Android:name="Android.permission.DISABLE_KEYGUARD"/>

[〜#〜]または[〜#〜]

フォロー このリンク

4
Nikhil

XML Way:

親レイアウトでkeepScreenOn属性を使用するだけです。

<androidx.constraintlayout.widget.ConstraintLayout
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        xmlns:app="http://schemas.Android.com/apk/res-auto"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:keepScreenOn="true">

プログラム的に:

フラグを追加することにより、プログラムで設定できます。

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
1
SANAT

次の行では、アプリがフォアグラウンドにあるときに電話をオンにすることができます

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

次の手順では、ロックボタンが押されたときにロック画面を無効にすることができます。 KeyguardLockクラスはAPIレベル13で非推奨になりました

/*onCreate*/
KeyguardManager keyguardManager = (KeyguardManager)getSystemService(Activity.KEYGUARD_SERVICE);
KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE); // Deprecated :/
lock.disableKeyguard();

そしてあなたのマニフェストで:

<uses-permission Android:name="Android.permission.DISABLE_KEYGUARD"/>
1
Yacine

まだ言及されていない興味深いオプションの1つは、

View#setKeepScreenOn(boolean onOff)

方法。これは実際には、アプリの実行中の任意の時点で動的に使用できます。アプリの状態に応じて画面モードを設定します

0
doulos

キーガードコードを使用すると、完全に機能します

メインアクティビティファイルのonCreateメソッドにコードを貼り付け、Androidマニフェストファイル)に権限を貼り付けるだけです

0
Faizi Rapper