研究調節螢幕亮度時遇到的問解決方案如下:
1、可以通過擷取當前Activity 的WindowManager.LayoutParams 屬性,然後設定其screenBrightness的值即可;
screenBrightness
的取值範圍在[0,1]之間,具體可以如下操作:
WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.screenBrightness = 0.5; getWindow().setAttributes(lp);
2、有時我們需要用一個Seekbar控制項來動態控制螢幕的亮度。
首先擷取系統螢幕的最大值,然後設定seekbar的setMax。
/** * 擷取螢幕亮度 */ private int getScreenBrightness() { int nowBrightnessValue = 0; ContentResolver resolver = getContentResolver(); try { nowBrightnessValue = android.provider.Settings.System.getInt(resolver, Settings.System.SCREEN_BRIGHTNESS); } catch (Exception e) { e.printStackTrace(); } return nowBrightnessValue; }
然後在調節螢幕亮度函數中與seekbar進行綁定
private void setScreenLight(View popupView) { mBrightnessProgress = getScreenBrightness(); final SeekBar mSeekBarLight = (SeekBar) popupView.findViewById(R.id.seekBarLight); mSeekBarLight.setProgress(mBrightnessProgress); mSeekBarLight.setMax(MAX_BRIGHTNESS); mSeekBarLight.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { // TODO Auto-generated method stub if (fromUser) { WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.screenBrightness = (float) (progress / (MAX_BRIGHTNESS * 1.0)); getWindow().setAttributes(lp); } } @Override public void onStartTrackingTouch(SeekBar arg0) { // TODO Auto-generated method stub } @Override public void onStopTrackingTouch(SeekBar arg0) { // TODO Auto-generated method stub } });
}
3、當我們遇到把Activity做為子Activity潛入到TabActivity 或者 ViewGroup 類容器時,通常上面的方法設定無法取得成功,
活動捲軸的過程中,螢幕亮度不發生改變。
因為調節亮度範圍發生了改變,之前是在Activity裡面對亮度修改, 而現在是作為子activity對TabActivity或ViewGroup 容器進行修改,因此不能成功,需要
通過getParent()方法擷取器Parent,然後設定。
private void setScreenLight(View popupView) { mBrightnessProgress = getScreenBrightness(); final SeekBar mSeekBarLight = (SeekBar) popupView.findViewById(R.id.seekBarLight); mSeekBarLight.setProgress(mBrightnessProgress); mSeekBarLight.setMax(MAX_BRIGHTNESS); mSeekBarLight.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { // TODO Auto-generated method stub if (fromUser) { WindowManager.LayoutParams lp = getParent().getWindow().getAttributes(); lp.screenBrightness = (float) (progress / (MAX_BRIGHTNESS * 1.0)); getParent().getWindow().setAttributes(lp); } } @Override public void onStartTrackingTouch(SeekBar arg0) { // TODO Auto-generated method stub } @Override public void onStopTrackingTouch(SeekBar arg0) { // TODO Auto-generated method stub } });}