美文网首页
Android 之调节系统亮度

Android 之调节系统亮度

作者: tandeneck | 来源:发表于2019-07-10 10:14 被阅读0次

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

    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 ,不会是当前屏幕亮度。

    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 之调节系统亮度

          本文链接:https://www.haomeiwen.com/subject/zahckctx.html