2013年12月24日火曜日

画面の輝度を変更する

Androidで画面の明るさを変更する方法を調べました。
現在のWindowの明るさを変更する方法とシステム設定を変更する方法の2種類を紹介。

1. 現在のWindowの明るさを変更する方法
この方法では現在のWindow(通常はActivity)の明るさのみを変更するので、ホーム画面や他のアプリに移動すると元の明るさに戻ってしまう。
LayoutParams.screenBrightness の値を読み書きする。値の範囲は 0.0〜1.0。
ただし、0.0を設定するとアプリの挙動がおかしくなる機種があるので注意が必要。
Xperia AXだと0.0にするとアプリが操作できなくなってしまいました。クラッシュしている訳でもなく不思議な挙動…。
Windowの明るさを取得
    WindowManager.LayoutParams lp = getWindow().getAttributes();
    float value = lp.screenBrightness;
Windowの明るさを設定
    float brightness = 0.5f;        // [0.0-1.0]
    WindowManager.LayoutParams lp = getWindow().getAttributes();
    lp.screenBrightness = brightness;
    getWindow().setAttributes(lp);

2. システムの明るさ設定を変更する方法
上記の方法ではホーム画面や他のアプリに移動すると元の明るさに戻ってしまう。Settings.Systemの値を変更することで システム全体の明るさを変更可能。
システム設定を変更するためには、まず、AndroidManifest.xml にパーミッションの追加が必要。
    <uses-permission android:name="android.permission.WRITE_SETTINGS"></uses-permission>
その後、Settings.SystemのSCREEN_BRIGHTNESSの値を読み書きする。値の範囲は0から255で255が最も明るい。
システム設定の明るさを取得
    int value = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);
システム設定の明るさを設定
    int value = 255;    // 0〜255の値を設定
    Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, value);
上記でシステム設定を変更してもすぐに変更が反映されず、ホーム画面や他のアプリに移動したときに反映される。
スライダバーで明るさを変更するアプリ等を考えると、スライダバー操作中に実際に画面の明るさを変えユーザにフィードバックを返した方がわかりやすい。その場合は、1.のWindowの明るさを変更する方法と合わせて使うことで、すぐにユーザにフィードバックを返すことができる。

0 件のコメント :

コメントを投稿