android 通过悬浮窗调节屏幕亮度

网上大部分文章是通过Activity调节屏幕亮度的,但是这种亮度调节方法存在一个隐藏的bug,就是当如果当前屏幕上又一个悬浮窗,并且悬浮窗的type为WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;的时候,无论你怎么在activity中设置屏幕亮度都是无效的。猜测原因应该是由于当前的悬浮窗与设置亮度的activity处于同一个viewgroup或者悬浮窗处于更高一级的viewgroup,导致activity设置屏幕亮度无效。解决方法很简单,自己定义一个更高优先级的悬浮窗进行亮度设置,然后再移除悬浮窗就可以了。


代码如下,主要是加入一个悬浮窗


public class BrightnessSet {

	
	private static BrightnessSet mBrightnessSet;
	private Context context;
	
	private BrightnessSet(){
		init();
	};
	

	public static BrightnessSet getInstance(){
		if(mBrightnessSet == null) {
			mBrightnessSet = new BrightnessSet();
		}
		return mBrightnessSet;
	}
	
	
	public void setScreenBrightness(int brightness){
		if(brightness < 0 || brightness > 255){
			//自动调节亮度 ,先设置为150
			
			SystemSettings.startAutoBrightness(context);//设置亮度为自动
			Toast.makeText(context, R.string.system_settings_screenbrightness_auto, Toast.LENGTH_SHORT).show();
		}else{
			SystemSettings.stopAutoBrightness(context);

			setBrightness(brightness);
			SystemSettings.saveBrightness(context,brightness);//保存亮度,自定义的方法
			removeFloatView();
		}
	}
	
	
	
	/**
	 * 初始化悬浮窗
	 */
	private void init() {
		context = MyApplication.mMyApplication;//Application中的一个静态变量,也可以通过初始化传入context
		floatView = new TextView(context.getApplicationContext());
		windowManager = (WindowManager) context.getApplicationContext().getSystemService(
				Context.WINDOW_SERVICE);
		params = new LayoutParams();
		params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
		params.flags=LayoutParams.FLAG_NOT_TOUCH_MODAL 
         | LayoutParams.FLAG_NOT_FOCUSABLE 
         | LayoutParams.FLAG_NOT_TOUCHABLE; 

		params.format = PixelFormat.RGBA_8888; // 设置图片格式,效果为背景透明

		params.width = 0;
		params.height = 0;		
	}
	
	private TextView floatView ;
	private WindowManager windowManager;
	private LayoutParams params;
	/**
	 * 创建悬浮窗,通过悬浮窗设置亮度
	 */
	private void setBrightness(int brightness) {
		params.screenBrightness = brightness / 255;
		windowManager.addView(floatView, params);
	}

	private void removeFloatView() {
		windowManager.removeView(floatView);
	}

}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值