公司有个需求,弹出对话框,设置当前屏幕亮度是最大亮度的90%,对话框消失,恢复到原来亮度。有一种特殊情况,就是在弹出对话框的界面打开之后,用户手动调节了亮度,需要在界面中监听亮度变化
工具类代码:
public class ScreenUtil
{
/**
* 判断是否开启了自动亮度调节
*/
public static boolean isAutoBrightness(Context context)
{
ContentResolver resolver = context.getContentResolver();
boolean automicBrightness = false;
try
{
automicBrightness = Settings.System.getInt(resolver, Settings.System.SCREEN_BRIGHTNESS_MODE) == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
}
catch (Settings.SettingNotFoundException e)
{
e.printStackTrace();
}
return automicBrightness;
}
/**
* 获取屏幕的亮度
*
* @param activity
* @return
*/
public static int getScreenBrightness(Activity activity) {
int nowBrightnessValue = 0;
ContentResolver resolver = activity.getContentResolver();
try {
nowBrightnessValue = Settings.System.getInt(
resolver, Settings.System.SCREEN_BRIGHTNESS);
} catch (Exception e) {
e.printStackTrace();
}
return nowBrightnessValue;
}
/**
* 设置亮度
*
* @param activity
* @param brightness
*/
public static void setBrightness(Activity activity, int brightness) {
WindowManager.LayoutParams lp = activity.getWindow().getAttributes();
lp.screenBrightness = Float.valueOf(brightness) * (1f / 255f);
activity.getWindow().setAttributes(lp);
}
/**
* 停止自动亮度调节
*
* @param activity
*/
public static void stopAutoBrightness(Activity activity) {
Settings.System.putInt(activity.getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS_MODE,
Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
}
/**
* 开启亮度自动调节
*
* @param activity
*/
public static void startAutoBrightness(Activity activity) {
Settings.System.putInt(activity.getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS_MODE,
Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
}
/**
* 保存亮度设置状态
* 不保存,只能在当前的activity中有作用
* @param resolver
* @param brightness
*/
public static void saveBrightness(ContentResolver resolver, int brightness) {
Uri uri = Settings.System
.getUriFor("screen_brightness");
Settings.System.putInt(resolver, "screen_brightness",
brightness);
// resolver.registerContentObserver(uri, true, myContentObserver);
resolver.notifyChange(uri, null);
}
}
对话框中相应的代码
private int currentBrightness=0;//获得当前屏幕亮度
private boolean isAutoBrightness=false;//记录屏幕是否开启自动调节
.......
//对话框显示的时候,设置亮度为最大亮度的90%
setBrightness90();
this.setOnDismissListener(new OnDismissListener()
{
@Override
public void onDismiss()
{
//对话框消失的时候,还原亮度
setDefaultBrightness();
}
});
......
/**
* 设置屏幕亮度为最大亮度的90%
*/
private void setBrightness90(){
currentBrightness = ScreenUtil.getScreenBrightness(mContext);
isAutoBrightness = ScreenUtil.isAutoBrightness(mContext);
if(isAutoBrightness){
ScreenUtil.stopAutoBrightness(mContext);
}
String model = Build.MODEL;
int brightness =0;
if ("ALP-AL00".equals(model)){
//如果是华为Mate 10 就设置最大亮度是165
brightness=165;
}else {
//其余大部分手机最大亮度是255
brightness=255;
}
ScreenUtil.setBrightness(mContext, (int) (brightness*0.9));
}
/**
* 还原屏幕亮度
*/
private void setDefaultBrightness(){
if(isAutoBrightness){
ScreenUtil.startAutoBrightness(mContext);
}
ScreenUtil.setBrightness(mContext, currentBrightness);
}
public void setCurrentBrightnessAndAutoBrightness(int currentBrightness,boolean autoBrightness)
{
this.currentBrightness = currentBrightness;
isAutoBrightness = autoBrightness;
}
弹出对话框的界面
/**
* 监听屏幕亮度变化
*/
private ContentObserver mBrightnessObserver = new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
if(!qrCodeWindow.isShowing()){
//不显示对话框,根据系统设置调节屏幕亮度
ScreenUtil.setBrightness(IDCardOneCodeActivity.this,ScreenUtil.getScreenBrightness(IDCardOneCodeActivity.this));
}else{
//显示对话框,不根据系统调节变化亮度,先设置当前亮度和是否自动调节亮度配置,等对话框消失以后,设置亮度为调整后的亮度
qrCodeWindow.setCurrentBrightnessAndAutoBrightness(ScreenUtil.getScreenBrightness(IDCardOneCodeActivity.this),
ScreenUtil.isAutoBrightness(IDCardOneCodeActivity.this));
}
}
};
@Override
protected void onResume()
{
super.onResume();
getContentResolver().registerContentObserver(
Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS), true,
mBrightnessObserver);
}
@Override
protected void onDestroy()
{
super.onDestroy();
getContentResolver().unregisterContentObserver(
mBrightnessObserver);
}