完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
亮度调节原理
亮度调节框对应代码: frameworksbasepackagesSystemUIsrccomandroidsystemuisettingsBrightnessDialog.java
亮度调节对应代码: frameworksbasepackagesSystemUIsrccomandroidsystemuisettingsBrightnessController.java
public void registerCallbacks() { if (mListening) { return; } // 应该是检测环境亮度的,主要用于自动亮度模式下,对于手动调节的模式不适用,可以忽略 mBrightnessObserver.startObserving(); // 跟踪用户的行为,应该是跟踪用户是否有对亮度进行过调节 mUserTracker.startTracking(); // Update the slider and mode before attaching the listener so we don't // receive the onChanged notifications for the initial values. updateMode(); // 更新亮度调节模式(一般分为自动模式和手动模式) updateSlider(); // 更新滑块的值 // 给调节滑块设置 onChanged 监听 mControl.setOnChangedListener(this); // 标志监听状态,true 表示监听中 mListening = true; } 其中最重要的是对 调节滑块 进行监听:mControl.setOnChangedListener(this);
public void onChanged(ToggleSlider view, boolean tracking, boolean automatic, int value) { // 根据是否为自动亮度模式,设置 Icon updateIcon(mAutomatic); if (mExternalChange) return; // 但处于手动模式的时候,进入 if 语句 if (!mAutomatic) { // 'val' 是亮度值 final int val = value + mMinimumBacklight; // 调用 setBrightness(val),将亮度值设为 'val' setBrightness(val); // 当系统没有跟踪用户当前行为时,执行 if,把亮度值写入系统 if (!tracking) { 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); } }); } } for (BrightnessStateChangeCallback cb : mChangeCallbacks) { cb.onBrightnessLevelChanged(); } }
private void setBrightness(int brightness) { try { // mPower 是一个 IPowerManager 接口,这里调用了 setTemporaryScreenBrightnessSettingOverride // 来设置亮度值,最终实现是在PowerManagerService mPower.setTemporaryScreenBrightnessSettingOverride(brightness); } catch (RemoteException ex) { } } 以上就是亮度调节的大概流程。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
基于米尔瑞芯微RK3576核心板/开发板的人脸疲劳检测应用方案
678 浏览 0 评论
920 浏览 1 评论
814 浏览 1 评论
2030 浏览 1 评论
3275 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 04:38 , Processed in 0.717779 second(s), Total 74, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号