现在的位置: 首页 > 综合 > 正文

Android 调节屏幕亮度问题

2012年09月15日 ⁄ 综合 ⁄ 共 2367字 ⁄ 字号 评论关闭

研究调节屏幕亮度时遇到的问解决方案如下:

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

            }
        });

}

抱歉!评论已关闭.