android自动调节背光,android自动调节背光

这项功能涉及两个模块,光传感器和背光,光传感器采集周围环境的光感强度,上报给系统,系统通过PowerManagerService.java中设置背光值

1.powermanagerService 中实现自动调节背光

1.1 enableLightSensorLocked(Boolean enable){

if(enable){

mSensorManager.registerListener(mLightListener,mLightSensor,xxx);

}

}

在handleLightSensorValue函数中进行处理。

1.2 mHandler.postDelayed(mAuoBrightnessTask,LIGHT_SENSOR_DELAY);

1.3调用lightSensorChangedLocked(value,false);

1.4调用

mScreenBrightnessAnimator.animateTo(lcdValue,value,SCREEN_BRIGHT_BIT,steps*NORMAL_FRAME_TIME_MS);

2配置lcd相关背光值

函数initInThread中获取config_autoBrightnessLevels中的数组

If(mUseSoftwareAutoBrightness){

mAutoBrightnessLevels = resources.getIntArray(

com.android.internal.R.array.config_autoBrightnessLevels);

mLcdBackLightValues = resources.getIntArray(

com.android.internal.R.array.config_autoBrightnessLcdBacklightValues);

}

注意values可以选择mLcdBackLightValues作为参数,这样就将配置表中的值转化为了系统中使用的值

getAutoBrightnessValue(SensorValue,int [] values){

for(i=0;i

{

If(SensorValue

Break;

}

Final int minval = values[0];

Final int maxval = values[mAutoBrightnessLevels.length];

}

相关的数组定义在framework/base/core/res/res/values/config.xml

N个等级对应N+1个背光值,背光值应该满足0-255,背光系统节点

Sys/class/leds/lcd-backlight/brightness

3.上述分析可知:

作为光传感器获取的实际值通过驱动层上传到hal层,通过hal层poll到framework,为了减少配置文件调节可以在hal层或者kernel进行统一的映射,不会影响到自动调节背光的动画效果。

这样的好处就是多个项目时不必每次都去调节配置表。

例如:hal层中readEvents函数

调用

indextoValue(size_t index) const

{

Static const struct adcToLux{

Size_t adc_value;

Float lux_value;

} adcToLux[] = {

{150,10.0},

{800,160},

{900,225},

{1000,320},

{1400,1280},

};

Return adcToLux[ARRAY_SIZE(adcToLux)-1].lux_value;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android中可以通过修改系统的Settings来实现手动调节背光的功能。首先,需要申请修改Settings的权限,即`<uses-permission android:name="android.permission.WRITE_SETTINGS"/>`。然后,需要取消光感自动调节屏幕亮度的功能,将其设置为手动调节模式。关闭光感、设置手动调节背光模式的方法如下: ```java public void setScreenManualMode(Context context) { ContentResolver contentResolver = context.getContentResolver(); try { int mode = Settings.System.getInt(contentResolver, Settings.System.SCREEN_BRIGHTNESS_MODE); if (mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) { Settings.System.putInt(contentResolver, Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); } } catch (Settings.SettingNotFoundException e) { e.printStackTrace(); } } ``` 此外,还可以通过修改当前Activity界面的窗口亮度或修改系统的亮度值来实现手动设置背光的效果。具体代码如下: ```java // 修改当前Activity界面的窗口亮度 private void setScreenLight(int brightness) { WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.screenBrightness = Float.valueOf(brightness) * (1f / 255f); getWindow().setAttributes(lp); } // 修改系统的亮度值 public void setScreenLight(int brightness) { Uri uri = Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS); ContentResolver contentResolver = getContentResolver(); Settings.System.putInt(contentResolver, Settings.System.SCREEN_BRIGHTNESS, brightness); contentResolver.notifyChange(uri, null); } ``` 需要注意的是,非系统签名的应用需要引导用户手动授权修改Settings权限。在Android中,系统手动设置背光、待机休眠等功能是通过PowerManagerService.java统一管理,自动背光则是由AutomaticBrightnessController.java管理,最后统一调用DisplayPowerController.java进行处理。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [Android 修改屏幕背光方案](https://blog.csdn.net/wjky2014/article/details/100941278)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Android 系统背光设置](https://blog.csdn.net/tq501501/article/details/109246686)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值