サイト移転のお知らせ:http://techbooster.org/に移転しました

画面(バックライト)の明るさを変える

10月 31, 2010   //   by kseto   //   デバイス  //  1 Comment

今回は端末の画面(バックライト)の明るさを変える方法について紹介します。

端末の画面の明るさを変えるにはWindowクラスsetAttributesメソッドを使います。
setAttributesに与えるパラメータにはWindowManager.LayoutParamsクラスに定義されている
screenBrightness定数を指定します。
screenBrightnessに設定できる値は0未満がデフォルト(システム設定)、
0.0(暗)~1.0(明)となっています。

(2010/11/09:LayoutParamsはたくさんあるよ、と教えてもらいました。WindowManager.LayoutParamsに修正しました。@yanzmさん、ご指摘ありがとうございました!)

ただし、この方法で変更できるのは現在表示されているウィンドウの輝度のみで、
システム全体の輝度は変更できませんので注意が必要です。

続きからサンプルコードです。

静的に輝度を設定するのであれば以下のような実装になります。

Window myWin = getWindow(); //現在の表示されているウィンドウを取得
LayoutParams lp = new LayoutParams(); //LayoutParams作成

lp.screenBrightness = 1.0f; //輝度最大
myWin.setAttributes(lp); //ウィンドウにLayoutParamsを設定

getWindow()メソッドで現在表示されているウィンドウを取得します。
更に、新規作成したLayoutParamsオブジェクトのscreenBrightnessに輝度を代入します。
このLayoutParamsオブジェクトをsetAttributesメソッドでウィンドウに設定することで輝度が変更されます。

これを応用して、シークバーを使って輝度調整を行うようにすると以下のようなコードになります。

seekBar.setOnSeekBarChangeListener(
		new OnSeekBarChangeListener() {
			public void onProgressChanged(SeekBar seekBar,
					int progress, boolean fromUser) {
				float value = progress/100f; //プログレスバーの値を輝度設定値に変換

		        	lp.screenBrightness = value; //プログレスバーの値を設定
		        	myWin.setAttributes(lp);

			tv1.setText("Brightness:"+value+"%"); //設定輝度を表示
			}
		}
);

輝度を低くし過ぎるとフォーカスを失う問題

上記の実装で輝度を調節できるのですが、輝度を低くし過ぎるとWindowがフォーカスを失ってしまい、
タッチパネルやHomeボタンを押しても操作できなくなってしまいます。
Xperiaでは輝度を0にするとフォーカスを失ってしまったのですが、他の端末では閾値が異なるようです。
このような問題点があるので、フォーカスを失ってしまう閾値を超えないように実装を工夫する必要があります。

関連する記事:

Sponsored Link

1 Comment

  • [...] 画面(バックライト)の明るさを変える [...]

技術書新刊 発売中

アンドロイドアカデミアには、CIやテスト、互換検証など実務に生きるノウハウをあつめています

技術書新刊 発売中

Android Next!はAndroid 7.0に対応したはじめての技術書です!


The Web Explorer 2はCSSの中央寄せやWebAudioなど未来を読み解く一冊です


Revised TypeScript in DefinitelylandはTypeScript 2.0(β)に対応した解説書です。インストールから型定義まで幅広くサポートしています


技術書をかこう!はエンジニアらしい執筆環境を構築、HowTo本です