Android9.0手动亮度调节流程

本文详细解析了Android系统中亮度调节的内部流程,从BrightnessController到DisplayManager,再到HAL层的调用过程,覆盖rk3328平台及Android9.0版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

最近在改平台的亮度设置,顺便整理一下亮度调节的过程,使他人能方便理解亮度流程。

Kernel: v4.4.179
Device: rk3328
Platform Version: Android 9.0

流程如下

  1. frameworks/base/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
    1

  2. DisplayManager.java

     public void setTemporaryBrightness(int brightness) {
    		 mGlobal.setTemporaryBrightness(brightness);
     }
    
  3. DisplayManagerGlobal.java

     public void setTemporaryBrightness(int brightness) {
     	try {
         	mDm.setTemporaryBrightness(brightness);
     	} catch (RemoteException ex) {
         	throw ex.rethrowFromSystemServer();
     	}
     }
    
  4. DisplayManagerService.java

     public void setTemporaryBrightness(int brightness) {
     ...
       	mDisplayPowerController.setTemporaryBrightness(brightness);
     ...
     }
    
  5. DisplayPowerController.java

     public void setTemporaryBrightness(int brightness) {
     	Message msg = mHandler.obtainMessage(MSG_SET_TEMPORARY_BRIGHTNESS,
             brightness, 0 /*unused*/);
     		msg.sendToTarget();
     }
     ...
     private void updatePowerState() {
     	//此方法比较长,里面有大量的判断,下面只写关键语句
     	...
     	animateScreenBrightness(brightness, 0);
     	...
     }
     ...
     private void animateScreenBrightness(int target, int rate) {
     	//这一句就是关键的设置语句
     	if (mScreenBrightnessRampAnimator.animateTo(target, rate)) {
      	}
     }
    
  6. 下面的就不太好跟了,直接贴图 RampAnimator.java
    1

  7. DisplayPowerState.java
    1

     setScreenBrightness(int brightness){...}
     scheduleScreenUpdate() {...}
     postScreenUpdateThreadSafe(){...}
     Runnable mScreenUpdateRunnable = new Runnable() {
     	...
     	mPhotonicModulator.setState(mScreenState, brightness)
     	...
     }
    

    x
    1

  8. 又调回到了DisplayManagerService.java
    5
    1

  9. LocalDisplayAdapter.java
    1
    y

  10. LightsService.java
    h
    1

  11. com_android_server_lights_LightsService.cpp
    n

后记

在这个之后的就是调用hal层的.so库, 根据不同厂商、不同Anroid版本可能实现有所不同。

转载请注明出处:http://www.wolfnx.com/2020/03/16/Brightness-Set-Stream

作者 : wolfnx
邮箱 : wolfnx@outlook.com
邮箱2 : lostnx@gmail.com

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值