wake lock を設定する

ウェイクロックを設定して、デバイスを一時的に起動状態に保つことができます。

依存関係

ウェイクロックを設定するには、アプリに WAKE_LOCK 権限が必要です。アプリのマニフェストに権限を追加します。

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

ウェイクロックを作成して取得する

ウェイクロックを取得する手順は次のとおりです。

  1. PowerManager.newWakeLock() を呼び出してウェイクロックを作成します。これにより、PowerManager.WakeLock オブジェクトが作成されて構成されますが、デバイスが実際にスリープ状態にならないわけではありません。

  2. デバイスを起動状態に保つには、wake lock オブジェクトの acquire() メソッドを呼び出します。

たとえば、サービスを利用してなんらかの処理を行うブロードキャスト レシーバがアプリに含まれている場合は、次のコードを使用して wake lock を設定して取得できます。

Kotlin

val wakeLock: PowerManager.WakeLock =
    (getSystemService(POWER_SERVICE) as PowerManager).run {
        newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyClassName::MyWakelockTag").apply {
            acquire(WAKELOCK_TIMEOUT)
        }
    }

Java

PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
PowerManager.WakeLock wakeLock =
        powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyClassName::MyWakelockTag");
wakeLock.acquire(WAKELOCK_TIMEOUT);

このコードに関する主なポイント

  • コードがウェイクロック オブジェクトを作成するとき、クラスの名前をウェイクロック タグの一部として使用します。wake lock のタグの一部として、パッケージ名、クラス名、またはメソッド名を含めることをおすすめします。こうすることで、エラーが発生した場合に、ソースコード内のウェイクロックを特定しやすくなります。詳細については、ウェイクロックに適切な名前を付けるをご覧ください。

  • WakeLock.acquire(long) には、ミリ秒単位のタイムアウト値が渡されます。この時間が経過すると、すでにリリースされていない場合、システムはウェイクロックをリリースします。

関連ドキュメント