読者です 読者をやめる 読者になる 読者になる

うさがにっき

読書感想文とプログラムのこと書いてきます

Androidの画面点灯を制御する(wakelock、FLAG_KEEP_SCREEN_ONの使い方)

概要

画面点灯を制御するAPIを使ってみる

詳細

動画などを扱う場合、画面が自動で消灯すると困る時がある
そんなときにつかうのがwakelock,FLAG_KEEP_SCREEN_ON
だが、画面の点灯は電池の消費が激しいため、不用意に使うとユーザが離れてしまう
そのため、動画再生後に解除や、制限時間後、解除するなど考慮が必要

FLAG_KEEP_SCREEN_ONの使用方法

一画面で画面消灯を防ぎたい場合はFLAG_KEEP_SCREEN_ONを使う
このやり方だと、後述するwakelockが必要ないため、権限などが不要であることがメリット
また、画面遷移時に適切に解除してくれるため、そこまで厳密な管理が必要ない

点灯時

public class MainActivity extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
  }

アプリ側で解除したい時

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

wakelockの使用方法

複数画面にわたって消灯したくない時はwakelockを使う

AndroidManifestに使用を宣言

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

wakelockを実行

PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
Wakelock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
        "MyWakelockTag");
wakeLock.acquire();

wakelock解除

wakelock.release();

wakelockは解除し忘れるとずっと端末点灯状態になるため、解除し忘れが問題になりがち
念のため制限時間を付与できる以下メソッドで実行しておくと良いことが多い

// timeout ms後自動で解除
wakeLock.acqire(timeout);

参考

android - Difference between Wakelock and Activity Flag_KEEP_SCREEN_ON - Stack Overflow
Keeping the Device Awake | Android Developers

良いAndroidアプリを作る139の鉄則

良いAndroidアプリを作る139の鉄則