アプリケーション
画面の明るさを変更するには、
デフォルトでインストールされている「Settings」アプリケーションを起動し、
「Sound & Display」 > 「Brightness」から変更することができます。

ソースコード
「Settings」アプリケーション > 「Sound & Display」 > 「Brightness」のソースコードは、以下にあります。
packages\apps\Settings\src\com\android\settings\BrightnessPreference.java
[platform/packages/apps/Settings.git] / src / com / android / settings / BrightnessPreference.java
内部的な処理を、簡単に解説しておくと、
Brightnessの設定値は、
android.providerパッケージ、Setting.Systemクラス、SCREEN_BRIGHTNESS定数として定義されており、
Settings.System.getInt()、または、Settings.System.putInt()を呼び出すことで、設定の読み書きをしています。
※Settings.System.putInt()を呼び出すには、android.permission.WRITE_SETTINGSも必要
※設定値(int)の範囲は、0(暗い)~255(明るい)
※この設定値は、システム全体に共通のものであり、すべてのアプリケーションに適用される
しかしながら、この設定値は、あくまでもアプリケーションのためのものであり、
実際にハードウェアの明るさを変更しているわけではありません。
言い換えると、この設定値を変更するだけでは、ハードウェアの明るさを変更できず、
実際にハードウェアの明るさを変更するためには、以下のような処理が必要です。
try {
IHardwareService hardware = IHardwareService.Stub
.asInterface(ServiceManager.getService("hardware"));
if (hardware != null) {
hardware.setBacklights(brightness);
}
} catch (RemoteException doe) {
}
残念なことに、このIHardwareServiceは、非公開APIであり、SDKのバージョンによっては、変更される可能性があるため、
一般のアプリケーション開発者が使用することは好ましくありません。
※SDK1.0の時代にAndroid Marketに出回っている、いくつかの懐中電燈(FlashLight)アプリでは、この実装をしている模様
では、一般のアプリケーション開発者が、画面の明るさを変更する方法が全くないのかというと、そうではなく、
Android SDK 1.5から、新規にWindowManager.LayoutParams.screenBrightness定数が追加されており、
以下のような処理を実装することで、画面の明るさを変更することができます。
※設定値(float)の範囲は、0未満がデフォルト(システム設定)、0.0(暗い)~1.0(明るい)
※処理を呼び出す箇所は、例えば、Activity.onCreate()とか
WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.screenBrightness = 1.0f; getWindow().setAttributes(lp);
ただし、明るさの変更が適用される範囲は、そのウィンドウだけであり、システム全体には適用されません。
※もっとも、先の懐中電燈(FlashLight)アプリでは、自分自身のアプリにのみ適用したいため、この方法の方が都合がよい