admin管理员组

文章数量:1516870

公司有个需求,弹出对话框,设置当前屏幕亮度是最大亮度的90%,对话框消失,恢复到原来亮度。有一种特殊情况,就是在弹出对话框的界面打开之后,用户手动调节了亮度,需要在界面中监听亮度变化
工具类代码:

publicclassScreenUtil{/**
     * 判断是否开启了自动亮度调节
     */publicstaticbooleanisAutoBrightness(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
     */publicstaticintgetScreenBrightness(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
     */publicstaticvoidsetBrightness(Activity activity,int brightness){
        WindowManager.LayoutParams lp = activity.getWindow().getAttributes();
        lp.screenBrightness = Float.valueOf(brightness)*(1f/255f);
 
        activity.getWindow().setAttributes(lp);}/**
     * 停止自动亮度调节
     *
     * @param activity
     */publicstaticvoidstopAutoBrightness(Activity activity){
        Settings.System.putInt(activity.getContentResolver(),
                Settings.System.SCREEN_BRIGHTNESS_MODE,
                Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);}/**
     * 开启亮度自动调节
     *
     * @param activity
     */publicstaticvoidstartAutoBrightness(Activity activity){
        Settings.System.putInt(activity.getContentResolver(),
                Settings.System.SCREEN_BRIGHTNESS_MODE,
                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);}/**
     * 保存亮度设置状态
     *  不保存,只能在当前的activity中有作用
     * @param resolver
     * @param brightness
     */publicstaticvoidsaveBrightness(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);}}

对话框中相应的代码

privateint currentBrightness=0;//获得当前屏幕亮度privateboolean isAutoBrightness=false;//记录屏幕是否开启自动调节.......//对话框显示的时候,设置亮度为最大亮度的90%setBrightness90();this.setOnDismissListener(newOnDismissListener(){@OverridepublicvoidonDismiss(){//对话框消失的时候,还原亮度setDefaultBrightness();}});....../**
     * 设置屏幕亮度为最大亮度的90%
     */privatevoidsetBrightness90(){
        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));}/**
     * 还原屏幕亮度
     */privatevoidsetDefaultBrightness(){if(isAutoBrightness){
            ScreenUtil.startAutoBrightness(mContext);}
        ScreenUtil.setBrightness(mContext, currentBrightness);}publicvoidsetCurrentBrightnessAndAutoBrightness(int currentBrightness,boolean autoBrightness){this.currentBrightness = currentBrightness;
        isAutoBrightness = autoBrightness;}

弹出对话框的界面

/**
     * 监听屏幕亮度变化
     */private ContentObserver mBrightnessObserver =newContentObserver(newHandler()){@OverridepublicvoidonChange(boolean selfChange){if(!qrCodeWindow.isShowing()){//不显示对话框,根据系统设置调节屏幕亮度
                ScreenUtil.setBrightness(IDCardOneCodeActivity.this,ScreenUtil.getScreenBrightness(IDCardOneCodeActivity.this));}else{//显示对话框,不根据系统调节变化亮度,先设置当前亮度和是否自动调节亮度配置,等对话框消失以后,设置亮度为调整后的亮度
                qrCodeWindow.setCurrentBrightnessAndAutoBrightness(ScreenUtil.getScreenBrightness(IDCardOneCodeActivity.this),
                        ScreenUtil.isAutoBrightness(IDCardOneCodeActivity.this));}}};@OverrideprotectedvoidonResume(){super.onResume();getContentResolver().registerContentObserver(
                Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS),true,
                mBrightnessObserver);}@OverrideprotectedvoidonDestroy(){super.onDestroy();getContentResolver().unregisterContentObserver(
                mBrightnessObserver);}

本文标签: 弹出对话系统编程