Android 8.1 DisplayPowerController(三) 亮度调节

背光调节,即亮度调节,根据调节方式可以分为手动调节和自动调节。而手动调节有根据调节UI不同,有式有如下几种:

  • 1.在设置->显示中手动调节;
  • 2.在SystemUI中手动调节;
  • 3.在播放视频时上下滑动界面调节亮度.

本篇文章对手动调节亮度流程做一个总结。

1.设置-显示、SystemUI中调节亮度

Settings和SystemUI中的中亮度调节进度框都是来自于SystemUI中的BrightnessDialog,这里我们主要分析其设置亮度的功能,对于该进度框如何自定义实现不做分析。
当点击或者拖动进度框时,会回调SystemUI.BrightnessController中的onChange()方法,在这个方法中,会对根据是否自动亮度开启、是否VR模式等分别进行处理,每个分支中,首先会通过Binder调用PMS中的setTemporyScreenBrightnessSettingOverride(),改变临时亮度值,然后开启一个异步任务,将SettingsProvider中的对应值改变,该方法如下:

@Override
public void onChanged(ToggleSlider toggleSlider, boolean tracking, boolean automatic,
        int value, boolean stopTracking) {
   
    updateIcon(mAutomatic);
    if (mExternalChange) return;

    if (mIsVrModeEnabled) {
   
         //VR模式相关亮度,略去
    } else if (!mAutomatic) {
   //未开启自动调节亮度时
        final int val = value + mMinimumBacklight;
        //设置背光
        setBrightness(val);
        if (!tracking ) {
   
            //将亮度值保存在SettingsProvider数据库中
            AsyncTask.execute(new Runnable() {
   
                    public void run() {
   
                        Settings.System.putIntForUser(mContext.getContentResolver(),
                                Settings.System.SCREEN_BRIGHTNESS, val,
                                UserHandle.USER_CURRENT);
                    }
                });
        }
    } else {
   //开启自动调节亮度时
        //计算得到自动背光亮度调整值,并设置
        final float adj = value / (BRIGHTNESS_ADJ_RESOLUTION / 2f) - 1;
        setBrightnessAdj(adj);
        if (!tracking) {
   
            //保存在数据库中
            AsyncTask.execute(new Runnable() {
   
                public void run() {
   
                    Settings.System.putFloatForUser(mContext.getContentResolver(),
                            Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ, adj,
                            UserHandle.USER_CURRENT);
                }
            });
        }
    }

继续看setBrightness():

    private void setBrightness(int brightness) {
   
        try {
   
            mPower.setTemporaryScreenBrightnessSettingOverride(brightness);
        } catch (RemoteException ex) {
   
        }
  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值