Android 之调节系统亮度

播放视频进入全屏时往往会有调节亮度的需求,有些同学会粗暴的直接设置系统亮度。

Settings.System.putInt(mResolver, Settings.System.SCREEN_BRIGHTNESS, adjustBrightnessNumber(newBrightness));

private int adjustBrightnessNumber(int brightness)
{
    if(brightness < 0)
    {
        brightness = 0;
    }
    else if(brightness > 255)
    {
        brightness = 255;
    }
    return brightness;
}

但是,这样设置也会改变其他页面的亮度。当然,我们可以在进入全屏的时候记录一下当时的系统亮度值,然后退出全屏的时候恢复就可以了。不过,Android 系统也提供了设置某个页面(Activity)亮度的api啦:

/**
 * 设置当前APP的亮度
 *
 * @param activity        
 * @param brightnessPercent   0 to 1 adjusts the brightness from dark to full bright
 */
public void setAppBrightness(Activity activity, float brightnessPercent)
{
    Window window = activity.getWindow();
    WindowManager.LayoutParams layoutParams = window.getAttributes();
    layoutParams.screenBrightness = brightnessPercent;
    window.setAttributes(layoutParams);
}

所以,我们调整某个页面的亮度的逻辑可以分为2步:

- 获取当前屏幕亮度
- 改变屏幕亮度

改变屏幕亮度就是上面几行代码啦,简单的设置一下即可。但是获取当前屏幕亮度还是有点点坑的,因为如果一开始就通过 WindowManager.LayoutParams 的 screenBrightness 获取到的亮度是为 -1 的,即 BRIGHTNESS_OVERRIDE_NONE 这个值,通过注释我们知道是因为我们还没设置过 screenBrightness 这个值,所以第一次进入全屏获取到这个值永远是 -1 ,不会是当前屏幕亮度。

Android 之调节系统亮度_第1张图片
image.png

所以在获取当前屏幕亮度时我们还要做一个简单的判断,如果screenBrightness 等于 BRIGHTNESS_OVERRIDE_NONE (-1)的话,我们就要去获取系统的当前的亮度,说起来比较繁琐,代码其实是很简单的。

/**
 * 获取当前页面亮度
 * @return 
 */
public float getAppBrightness(Context context)
{
    float brightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE;
    if(context instanceof Activity)
    {
        Window window = ((Activity)context).getWindow();
        WindowManager.LayoutParams layoutParams = window.getAttributes();
        brightness = layoutParams.screenBrightness;
    }
    if(brightness == WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE)
    {
        brightness = getSystemBrightness() / 255f;
    }
    return brightness;
}

/**
 * 获取系统亮度
 */
public int getSystemBrightness()
{
    return Settings.System.getInt(mResolver, Settings.System.SCREEN_BRIGHTNESS, 255);
}

你可能感兴趣的:(Android 之调节系统亮度)