亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統(tǒng) > Android > 正文

android 屏幕亮度調(diào)節(jié)方法詳解

2020-04-11 12:41:51
字體:
供稿:網(wǎng)友

屏幕亮度自動(dòng)調(diào)節(jié)
主要是從Sensor分析之中分離出來分析LIGHT 光線感應(yīng)器,因此就分析一下自動(dòng)調(diào)節(jié)屏幕亮度(手機(jī)隨著光線的強(qiáng)度自我調(diào)節(jié),也就是在亮的光線下屏幕自動(dòng)調(diào)亮一些,暗的時(shí)候就自動(dòng)調(diào)暗一些,省得光線對(duì)眼睛有刺激).....

    (本人從歷經(jīng)挫折才大概了解流程),現(xiàn)在就開始講一下流程,如果有不對(duì)地方希望牛人指出來。。。

    先從Sttings入手吧,在diaplay中有屏幕亮度調(diào)節(jié),有一個(gè)進(jìn)度調(diào),上面有一個(gè)checkbox(自動(dòng)調(diào)節(jié)屏幕亮度的),

那么我們當(dāng)然去找settings下的文件開始看了,先找到
DiaplaySettings.java文件以及display_setting.xml文件,display_setting.xml里面能找到相應(yīng)的組件,但是 在DiaplaySettings.java文件中卻不能找到調(diào)用相應(yīng)組件的代碼,

那么我們?cè)俚絪ettings中去找,能找到BrightnessPreference.java文件,沒錯(cuò)這個(gè)文件就是自動(dòng)調(diào)節(jié)亮度的文件,我們先看看代碼:
構(gòu)造函數(shù)中有mAutomaticAvailable = context.getResources().getBoolean(com.android.internal.R.bool.config_automatic_brightness_available);
開始以為mAutomaticAvailabl的值(為true,在config.xml中)是判斷是否自動(dòng)調(diào)節(jié)亮度,因?yàn)樵谖腋M(jìn)到PowerManagerService.java中,在initInThread() 中
  mUseSoftwareAutoBrightness = resources.getBoolean(
                com.android.internal.R.bool.config_automatic_brightness_available);

        if (mUseSoftwareAutoBrightness) {
            mAutoBrightnessLevels = resources.getIntArray(
                    com.android.internal.R.array.config_autoBrightnessLevels);//得到自動(dòng)化調(diào)節(jié)的值調(diào)用 getAutoBrightnessValue(int sensorValue, int[] values) 方法
            mLcdBacklightValues = resources.getIntArray(
                    com.android.internal.R.array.config_autoBrightnessLcdBacklightValues);
            mButtonBacklightValues = resources.getIntArray(
                    com.android.internal.R.array.config_autoBrightnessButtonBacklightValues);
            mKeyboardBacklightValues = resources.getIntArray(。。。。。
。。。。。。這里看起來好像是當(dāng)mUseSoftwareAutoBrightness為true時(shí)就取得config.xml文件config_autoBrightnessLevels的值,再去根據(jù)光線自動(dòng)調(diào)節(jié),但是mAutomaticAvailabl的值只是說明有沒有自動(dòng)調(diào)節(jié)屏幕的功能(比如說你將config.xml文件的config_automatic_brightness_available的值改為false,編譯替換framework-res.apk那么在屏幕亮度調(diào)節(jié)中將沒有自動(dòng)調(diào)節(jié)的checkbox),這也能解釋構(gòu)造函數(shù)一開始就初始化mAutomaticAvailabl的值。

接下來在BrightnessPreference.java文件中有onProgressChanged,onStartTrackingTouch(SeekBar seekBar),onStopTrackingTouch(SeekBar seekBar)方法,這些一看也能懂就不介紹了,在onBindDialogView(View view)方法中有
mCheckBox = (CheckBox)view.findViewById(R.id.automatic_mode);
        if (mAutomaticAvailable) {//當(dāng)有自動(dòng)調(diào)節(jié)功能
            mCheckBox.setOnCheckedChangeListener(this);//為checkbox添加監(jiān)聽事件
            try {
                mOldAutomatic = Settings.System.getInt(getContext().getContentResolver(),
                        Settings.System.SCREEN_BRIGHTNESS_MODE);
。。。。。。
主要看public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        setMode(isChecked ? Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC
                : Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
        if (!isChecked) {
            setBrightness(mSeekBar.getProgress() + MINIMUM_BACKLIGHT);
        }
    }
這里才是你選擇自動(dòng)調(diào)節(jié)亮度的checkbox,如果選擇則setMode(Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);并將數(shù)據(jù)存放到數(shù)據(jù)庫中。

這里是重點(diǎn):這里有個(gè)數(shù)據(jù)庫,當(dāng)監(jiān)測到數(shù)據(jù)庫中的值發(fā)生改變時(shí)也就是變?yōu)镾ettings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC時(shí),就會(huì)跳到
powerManagerService.java的initInThread()中ContentResolver resolver = mContext.getContentResolver();
        Cursor settingsCursor = resolver.query(Settings.System.CONTENT_URI, null,
                "(" + Settings.System.NAME + "=?) or ("
                        + Settings.System.NAME + "=?) or ("
                        + Settings.System.NAME + "=?) or ("
                        + Settings.System.NAME + "=?) or ("
                        + Settings.System.NAME + "=?) or ("
                        + Settings.System.NAME + "=?) or ("
                        + Settings.System.NAME + "=?)",
                new String[]{STAY_ON_WHILE_PLUGGED_IN, SCREEN_OFF_TIMEOUT, DIM_SCREEN, XEC_DLS_CONTROL,
                        SCREEN_BRIGHTNESS_MODE, WINDOW_ANIMATION_SCALE, TRANSITION_ANIMATION_SCALE},
                null);
        mSettings = new ContentQueryMap(settingsCursor, Settings.System.NAME, true, mHandler);
        SettingsObserver settingsObserver = new SettingsObserver();
        mSettings.addObserver(settingsObserver);
數(shù)據(jù)庫中數(shù)據(jù)發(fā)生改變時(shí)觸發(fā)事件的發(fā)生。

在 powerManagerService.java的systemReady()(只在開機(jī)調(diào)用一次就不再調(diào)用)中
 if (mUseSoftwareAutoBrightness) {
            Log.i("frist","frist="+"aaaa");
            mLightSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
            enableLightSensor(true);
        }
而mUseSoftwareAutoBrightness是在initInThread()線程中取得了true值,那么就到enableLightSensor(true);方法去看
 if (enable) {
                    mSensorManager.registerListener(mLightListener, mLightSensor,
                            SensorManager.SENSOR_DELAY_NORMAL);
                }
如果傳遞來的值為true也就是enable=true就監(jiān)聽而且用匹配屏幕方向變化的感應(yīng)SENSOR_DELAY_NORMAL。
再看mLightListener事件:SensorEventListener mLightListener = new SensorEventListener() {
        public void onSensorChanged(SensorEvent event) {
            synchronized (mLocks) {
                int value = (int)event.values[0];//從event里面獲取當(dāng)前數(shù)據(jù)
                Log.i("value","value="+value);       
                long milliseconds = SystemClock.elapsedRealtime();
                if (mDebugLightSensor) {
                    Slog.d(TAG, "onSensorChanged: light value: " + value);
                }
                mHandler.removeCallbacks(mAutoBrightnessTask);
                if (mLightSensorValue != value) {//mLightSensorValue是當(dāng)前的屏幕亮度
                    if (mLightSensorValue == -1 ||
                            milliseconds < mLastScreenOnTime + mLightSensorWarmupTime) {
                        // process the value immediately if screen has just turned on
                        lightSensorChangedLocked(value);
                    } else {
                        // delay processing to debounce the sensor
                        mLightSensorPendingValue = value;//mLightSensorPendingValue是準(zhǔn)備要設(shè)置的亮度
                        mHandler.postDelayed(mAutoBrightnessTask, LIGHT_SENSOR_DELAY);//到mAutoBrightnessTask線程去完成自動(dòng)調(diào)節(jié)
                    }
                } else {
                    mLightSensorPendingValue = -1;
                }
            }
        }
當(dāng)前屏幕亮度肯定不等與-1,所以做else中的mHandler.postDelayed(mAutoBrightnessTask, LIGHT_SENSOR_DELAY),那么我們?cè)俚絤AutoBrightnessTask
線程看:private Runnable mAutoBrightnessTask = new Runnable() {
        public void run() {
            synchronized (mLocks) {
                int value = (int)mLightSensorPendingValue;
                Log.i("mLightSensorPendingValue","mLightSensorPendingValue"+mLightSensorPendingValue);
                if (value >= 0) {
                    mLightSensorPendingValue = -1;
                    lightSensorChangedLocked(value);
                }
            }
        }
    };就是不斷的去調(diào)用lightSensorChangedLocked(value)
private void lightSensorChangedLocked(int value) {
。。。。。。。
if (mLightSensorValue != value) {
            mLightSensorValue = value;
            if ((mPowerState & BATTERY_LOW_BIT) == 0) {
                // Use light sensor value no matter it is in a dock or not.
                int lcdValue = getAutoBrightnessValue(
                        value,
                        mLcdBacklightValues);// 取得mLcdBacklightValues里面的值
                int buttonValue = getAutoBrightnessValue(value, mButtonBacklightValues);
                int keyboardValue;
                if (mKeyboardVisible) {
                    keyboardValue = getAutoBrightnessValue(value, mKeyboardBacklightValues);
                } else {
                    keyboardValue = 0;
                }
。。。
if (mAutoBrightessEnabled && mScreenBrightnessOverride < 0) {//設(shè)置屏幕亮度
                    mScreenBrightness.setTargetLocked(lcdValue, AUTOBRIGHTNESS_ANIM_STEPS,
                            INITIAL_SCREEN_BRIGHTNESS, (int)mScreenBrightness.curValue);
                }
。。。。。
   }

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
亚洲欧美久久久久一区二区三区| 最新国产精品久久精品| 成年人视频免费| va婷婷在线免费观看| 特一级黄色大片| 国产麻豆精品久久一二三| 五月婷婷丁香网| 中文字幕国产专区| 国产精品27p| 男操女视频网站| 国产精品国产亚洲精品看不卡15| 制服.丝袜.亚洲.中文.综合懂| 岛国av在线不卡| 欧美成人精品二区三区99精品| 免费男女羞羞的视频网站中文版| 国产一区二区三区不卡在线观看| 久久久久久www| 一级片免费在线观看视频| 欧美精品与人动性物交免费看| 69174成人网| 亚洲美女黄网| 亚洲国产高清视频| 337p粉嫩色噜噜噜大肥臀| 懂色av中文字幕一区二区三区| 99精品在线观看| 国产福利电影在线播放| 999精品免费视频| 国产日韩欧美在线| 无码国产色欲xxxx视频| 亚洲精品国产精品国产| 国产精品成人99一区无码| 中文字幕激情视频| 日韩电影中文字幕一区| 欧美丰满老妇厨房牲生活| 国产精品久久波多野结衣| 国产精品1234| 精品国产综合区久久久久久| 真实的国产乱xxxx在线91| 97久久夜色精品国产| 亚洲色欲综合一区二区三区| 污污内射在线观看一区二区少妇| 亚洲成人av中文字幕| 欧美电影免费观看| 亚洲精品短视频| 17videosex性欧美| 六月丁香综合在线视频| 久久久久久色| 亚洲婷婷综合久久一本伊一区| 色先锋资源久久综合| 国产污视频在线播放| 国产免费黄视频在线观看| 91国产中文字幕| av在线亚洲男人的天堂| 9色porny| 国产美女搞久久| 日本在线一区| 国产99久久久国产精品潘金| 欧美在线影院一区二区| 精品国产区一区二区三区在线观看| 欧美黑人3p| 中文字幕在线观看播放| 欧美视频一区二区三区四区| 51午夜精品| 九一精品在线观看| 97超碰色婷婷| 中文字幕亚洲在线观看| 成人a在线视频| 91在线免费观看| 中文字幕一区二区三区波野结| 激情深爱一区二区| 欧美丰满老妇厨房牲生活| 精品国产18久久久久久二百| 国产一区二区三区蝌蚪| 久久丫精品国产亚洲av不卡| 国产男女猛烈无遮挡91| 插吧插吧综合网| 91九色在线免费视频| 欧美在线视频全部完| 日本韩国欧美一区二区三区| 国产日韩视频在线播放| 亚洲图色在线| 日韩免费电影| 97偷自拍亚洲综合二区| 久久九九影视网| 日本亚洲天堂| 国产二级片在线观看| 欧美 日本 国产| 亚洲中文一区二区三区| 黄色小说在线播放| 国产一区二区免费在线| 国产网红女主播精品视频| 精产国品自在线www| 911精品美国片911久久久| 日本国产一区二区三区| 亚洲精品视频一二三区| 天堂…中文在线最新版在线| 人人爽久久涩噜噜噜网站| 狠狠干夜夜爽| 亚洲成人午夜在线| 亚久久调教视频| 97精品一区二区| 国产精品久久久久久久久夜色| 国产精品亚洲lv粉色| 欧美一级淫片videoshd| 精品视频网站| 亚洲va久久久噜噜噜| 天堂成人娱乐在线视频免费播放网站| 91蜜桃网站免费观看| 黑人巨大精品欧美一区免费视频| 午夜亚洲国产au精品一区二区| 日韩激情电影免费看| 亚洲最快最全在线视频| 手机看片福利永久| 国产精品一区久久久| 国产日韩视频一区| 91麻豆免费观看| 国产日韩av一区| 香蕉视频成人在线| 欧美日韩亚洲第一| av片在线免费观看| 亚洲日本电影| 国内精品国产三级国产在线专| 亚洲天堂自拍偷拍| 欧美xxxx14xxxxx性爽| 国产精品久久久久永久免费观看| 一区二区三区视频在线观看| 久久国产精品影片| 日韩最新在线视频| 中文字幕av高清片| 91久久精品国产91性色tv| 久久亚洲精品毛片| 粉嫩欧美一区二区三区| 国产精品xxx| 国产视频一区在线观看一区免费| 中文字幕乱在线伦视频乱在线伦视频| 少妇网站在线观看| 色综合视频一区二区三区44| 日本老太婆做爰视频| 4438全国亚洲精品在线观看视频| 影音先锋黄色资源| 久久精品国产精品亚洲精品| 999国产精品永久免费视频app| 国产18精品乱码免费看| 成人污污www网站免费丝瓜| japanese23hdxxxx日韩| 久久丝袜视频| 人人澡人人澡人人看| 中文字幕在线中文字幕在线中三区| 亚洲影视一区二区| 久久精品国产欧美激情| 久久精品国产亚洲blacked| 欧美一区二区人人喊爽| 成人黄色毛片| 亚洲一级片在线播放| 中文字幕在线日韩| 老牛精品亚洲成av人片| 99精品视频免费看| 久久视频一区二区| 日韩欧美国产成人| 久久久久福利视频| 国精品人妻无码一区二区三区喝尿| 天天干,夜夜爽| www久久久久久久| 国产精品蜜芽在线观看| 超碰在线一区| 日本а中文在线天堂| 欧美成年人视频网站欧美| 亚洲欧美另类色图| 成年女人色毛片免费| 日韩成人av网站| 欧美视频免费播放| 天海翼一区二区三区四区在线观看| 色香蕉在线观看| 精品动漫一区二区三区在线观看| 日漫免费在线观看网站| 午夜精品久久久久久久99水蜜桃| 欧美专区在线| 久久久国产一区二区三区四区小说| 日本精品网站| 日本一本a高清免费不卡| 日韩精品国产欧美| 亚洲老司机在线| 91香蕉一区二区三区在线观看| 日本vs亚洲vs韩国一区三区二区| 欧美色精品天天在线观看视频| 欧洲av不卡| 欧美日韩一区二区三区高清| 精品一区二区免费在线观看| 亚洲美女喷白浆| 精品无码国模私拍视频| 久久久久久久蜜桃| 人妻少妇一区二区| 欧美美女日韩| 蜜桃精品久久久久久久免费影院| 国产综合欧美| 国产69精品久久久| 波多野结衣家庭教师| 午夜福利123| 国产香蕉一区二区三区在线视频| 日本sm残虐另类| 亚洲最大的成人av| 亚洲欧洲中文天堂| 国产一卡二卡三卡| 在线视频日韩欧美| 欧洲精品国产| 免费看又色又爽又黄网站| av毛片在线免费观看| 女人一区二区三区| 日韩高清中文字幕一区二区| 韩日欧美一区二区三区| 黄色激情在线播放| 蜜桃av乱码一区二区三区| 国产精品免费在线播放| 99在线精品免费视频九九视| 99在线视频免费观看| 亚洲欧美卡通另类91av| √资源天堂中文在线| 日韩欧美国产免费播放| 久久综合五月婷婷| 色综合天天狠狠| 人妻无码中文字幕免费视频蜜桃| 午夜激情福利视频| 天天操天天干天天玩| 久久av网址| 最爽无遮挡行房视频在线| 欧美亚洲视频一区二区| 99国产精品视频免费观看一公开| av片在线观看| 美女在线一区二区| 久热中文字幕| 国内一区二区在线视频观看| 免费中文字幕日韩欧美| 人妻精品无码一区二区三区| 69av成年福利视频| 野外性xxxxfreexxxxx欧美| 欧美一级久久久久久久久大| 欧美日韩高清丝袜| 少妇又紧又色又爽又刺激视频| 99久久99久久| 纪美影视在线观看电视版使用方法| 成人在线免费观看| 欧美日韩三级视频| 国产在线拍揄自揄拍| 漫画在线观看av| 激情一区二区| 999精品在线| 日韩avxxx| 免费看黄色aaaaaa 片| 爱爱视频网站| 第四色日韩影片| 国产高清在线一区二区| 在线天堂视频| 成全在线观看免费完整动漫| 成人免费观看视频| 最新四虎影在线在永久观看www| 亚洲国产综合视频在线观看| 欧美激情欧美| 精品视频一区二区在线| 欧美国产在线视频| 国产精品毛片一区视频| 九一精品在线观看| 欧美日韩免费区域视频在线观看| 国产欧美精品在线观看| 99国产精品免费| 久久九九亚洲综合| 亚洲一级av毛片| 中日韩av在线| 8x8x成人免费视频| 久久人人爽人人爽爽久久| 在线观看视频日韩| 久久aⅴ国产紧身牛仔裤| 亚洲一级av无码毛片精品| 成人情视频高清免费观看电影| 国产精品国产福利国产秒拍| 欧美日韩三级视频| 日韩精品在线一区二区三区| 精品少妇一区二区三区免费观| 日韩亚洲国产中文字幕欧美| 亚洲成人精品影院| 欧美成人精品一区二区| 美女网站视频色| 精品一区在线视频| 日韩电影网站| 国产日本视频| 久久视频在线视频| 国产三级做爰在线观看| 亚州av乱码久久精品蜜桃| 青春有你2免费观看完整版在线播放高清| 99国产精品久久久久老师| 日韩精品无码一区二区三区| 国产精品蜜臀av| 久久久久久久999| 欧美极品欧美精品欧美视频| 97超碰国产精品女人人人爽| 嫩草影院入口一二三免费| 影音先锋在线中文| 中文字幕在线视频日韩| 女尊高h男高潮呻吟| 伊人婷婷久久| 成人影院在线| 国产中文字幕精品| 欧美在线视频精品| 亚洲精品乱码久久久久久蜜桃欧美| 亚洲国产精品久久久久婷婷884| 亚洲啊v在线观看| 777米奇影视第四色| 久久精视频免费在线久久完整在线看| 成人日韩av| 亚洲永久免费av| 熟女熟妇伦久久影院毛片一区二区| 国产精品成人网站| 性欧美videos高清hd4k| 亚洲精品影院在线| 天天碰免费视频| www.射射射| 成人精品视频一区二区三区尤物| 亚洲一区二区三区乱码aⅴ蜜桃女| 99一区二区| jiujiure精品视频播放| 亚洲欧美日本国产| 亚洲成人免费观看| 色国产在线视频| ww久久综合久中文字幕| av网站大全在线观看| 一本到高清视频免费精品| 日韩成人在线看| 日本成人在线网站| 无码日韩人妻精品久久蜜桃|