Androidプログラマへの道 〜 Moonlight 明日香 〜 - バックライト自動消灯をON/OFFする
Androidは節電のために, バックライトを自動消灯する機能を備えている.
このバックライトの自動消灯をON/OFFする方法は何通りかある. ここでは3種類の方法を紹介する.

XMLにより設定

  • res/layout/main.xml
    • バッグライトを常時ONにする場合, "android:keepScreenOn"を"true"に設定する.
    • バックライトを自動消灯ONにする場合, "android:keepScreenOn"を"false"に設定する. (デフォルト)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:keepScreenOn="true"
  >
  <Button android:id="@+id/button_id"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/on_label"
    />
</LinearLayout>

ウィンドウに設定

    • getWindow()でウィンドウを取得する.
    • バッグライトを常時ONにする場合, Window#addFlagsメソッドでWindowManager.LayoutParams.FLAG_KEEP_SCREEN_ONを追加する.
    • バックライトを自動消灯ONにする場合, Window#clearFlagsメソッドで, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ONをクリアする.
package com.moonlight_aska.android.backlight01;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;

public class Backlight01 extends Activity implements View.OnClickListener {
  Button btn;
  boolean flag = false;
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    btn = (Button)findViewById(R.id.button_id);
    btn.setOnClickListener(this);
  }

  @Override
  public void onClick(View v) {
    // TODO Auto-generated method stub
    if(v == btn) {
      if(flag == false) {
        // 常時ONに設定
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        btn.setText(R.string.off_label);
        flag = true;
      }
      else {
        // 自動消灯ONに設定
        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        btn.setText(R.string.on_label);
        flag = false;
      }
    }
  }
}

ビューに設定

    • バッグライトを常時ONにする場合, View#setKeepScreenOnメソッドで"true"を設定する.
    • バックライトを自動消灯ONにする場合, View#setKeepScreenOnメソッドで"false"を設定する.
  @Override
  public void onClick(View v) {
    // TODO Auto-generated method stub
    if(v == btn) {
      if(flag == false) {
        // 常時ONに設定
        btn.setKeepScreenOn(true);
        btn.setText(R.string.off_label);
        flag = true;
      }
      else {
        // 自動消灯ONに設定
        btn.setKeepScreenOn(false);
        btn.setText(R.string.on_label);
        flag = false;
      }
    }
  }