設置屏幕亮度,並且監聽屏幕亮度變化

公司有個需求,彈出對話框,設置當前屏幕亮度是最大亮度的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);
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章