在oncreat函数添加注册监听函数,当监听到系统亮度改变时,就保存当前的屏幕亮度值,并使之生效 ,注意只对手动调节屏幕亮度生效 ;当手机系统亮度为自动调节时是没法控制的
private void monitorBright(){
try{
this.getContentResolver().registerContentObserver(Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS),true, BrightnessMode);
}catch (Exception e){
e.printStackTrace();
}
}
private ContentObserver BrightnessMode = new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
try{
int status = BrightnessTools.getBrightnessMode(PlayerActivity.this.getContentResolver());
DebugUtils.printInfo(TAG, "系统亮度status:" + status);
if (status == 0) {
// 状态为:0表示系统亮度为手动修改
int systemBrightness = BrightnessTools.getScreenBrightness(VideoPlayerActivity.this);
DebugUtils.printInfo(TAG, "监听系统亮度:" + systemBrightness);
WindowManager.LayoutParams lp = getWindow().getAttributes();
float b = systemBrightness * 1f / 255;
DebugUtils.debug(TAG, "系统亮度转换成屏幕亮度:" + b);
//亮度是从0~1中的一个浮点数
lp.screenBrightness = Math.min(Math.max(b, 0.01f), 1);
// Set Brightness
getWindow().setAttributes(lp);
} else {
// 表示系统亮度为自动调节(不做处理)
}
}catch (Exception e){
e.printStackTrace();
}
}
};
public static int getBrightnessMode(ContentResolver aContentResolver){
int screenMode=0;
try{
screenMode =Settings.System.getInt(aContentResolver, Settings.System.SCREEN_BRIGHTNESS_MODE);
} catch (Exception localException){
}
return screenMode;
}
/** * 获取屏幕的亮度 */
public static int getScreenBrightness(Activity activity) {
int nowBrightnessValue = 0;
ContentResolver resolver = activity.getContentResolver();
try{
nowBrightnessValue = android.provider.Settings.System.getInt(resolver, Settings.System.SCREEN_BRIGHTNESS);
}catch(Exception e) {
e.printStackTrace();
}
return nowBrightnessValue;
}
//在ondestroy函数取消注册监听
this.getContentResolver().unregisterContentObserver(BrightnessMode);
下面与系统亮度调整改变屏幕亮度无关,下面是进入页面将系统亮度初始化为屏幕亮度,以便于后面调节亮度时初始值不为0
保存当前的屏幕亮度值,并使之生效
//将系统亮度转初始化成屏幕亮度,避免后面调节时从0开始
int systemBrightness = BrightnessTools.getScreenBrightness(this);
DebugUtils.debug(TAG, "系统亮度:" + systemBrightness);
WindowManager.LayoutParams lp = getWindow().getAttributes();
float b = systemBrightness * 1f / 255;
DebugUtils.printInfo(TAG, "系统亮度转换成屏幕亮度:" + b);
//亮度是从0~1中的一个浮点数
lp.screenBrightness = Math.min(Math.max(b, 0.01f), 1);
// Set Brightness
getWindow().setAttributes(lp);