Android 之调节系统亮度
2019-07-10 本文已影响0人
tandeneck
播放视频进入全屏时往往会有调节亮度的需求,有些同学会粗暴的直接设置系统亮度。
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);
}