公司有個需求,彈出對話框,設置當前屏幕亮度是最大亮度的90%,對話框消失,恢復到原來亮度。有一種特殊狀況,就是在彈出對話框的界面打開以後,用戶手動調節了亮度,須要在界面中監聽亮度變化
工具類代碼:java
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); } }
對話框中相應的代碼web
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; }
彈出對話框的界面ide
/** * 監聽屏幕亮度變化 */ 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); }