android 系统亮度调整改变屏幕亮度(只对手动调节屏幕亮度生效)

在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);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值