明るさ設定の落とし穴
アプリケーション内で画面の明るさを設定するには
LayoutParamsのsceenBrightnessを設定すれば良い
ここにあるとおり、
This can be used to override the user's preferred brightness of the screen. A value of less than 0, the default, means to use the preferred screen brightness. 0 to 1 adjusts the brightness from dark to full bright.
0(暗い)~1(明るい)で明るさを設定できる。
WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
layoutParams.screenBrightness = 0.5f;
上記で中間の明るさに設定。
ところがちょっした落とし穴が。
layoutParams.screenBrightness = 0.0f;
とすると、画面が真っ暗になるだけではなく、windowがフォーカスを失ってしまう。
backキーやhomeキーを押しても
WARN/WindowManager(76): No focus window, dropping: KeyEvent{action=1 code=4 repeat=0 meta=0 scancode=158 mFlags=8}
とかなって、前の画面にも、ホームにも戻れない。
うーん、画面を暗くしたいだけであってフォーカスは失わないで欲しかったんだけど。
Focusを失わない最小値はいくつか? (GDD Phone, v1.6の場合)
0.004までOKだった。0.003を設定するとフォーカスを失った。
ただ、実際の明るさはリニアに変わるわけではなく、0.05間隔くらいで変わっているようだ。
0.6でもっとも暗くなり、それ以下の値を入れても明るさは変化せず、0.004を下回ったところでフォーカスを失う。
この辺はデバイス依存だろうから、「もっとも暗い値を設定したい」という場合は要注意。