公司有個需求,彈出對話框,設置當前屏幕亮度是最大亮度的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);
}