Android LCD和键盘 背光亮度设置

亮度设置
 应用设计
1.1 设置进度条范围
背光设置是在:设置->声音和显示->亮度,通过进度条来设置的。

文件:packages/apps/Settings/src/com/Android/settings/BrightnessPreference.java

private static final int MINIMUM_BACKLIGHT = android.os.Power.BRIGHTNESS_DIM + 10;

private static final int MAXIMUM_BACKLIGHT = android.os.Power.BRIGHTNESS_ON;

mSeekBar.setMax(MAXIMUM_BACKLIGHT - MINIMUM_BACKLIGHT);

设置进度条的范围,BRIGHTNESS_DIM = 20  BRIGHTNESS_ON=255,它们的定义在:

frameworks/base/core/java/android/os/Power.java

1.2 设置亮度
文件:packages/apps/Settings/src/com/android/settings/BrightnessPreference.java

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);

}

}

private void setBrightness(int brightness) {

try {

IPowerManager power = IPowerManager.Stub.asInterface(

ServiceManager.getService("power"));

if (power != null) {

power.setBacklightBrightness(brightness);

}

} catch (RemoteException doe) {

}       

}

由以上代码可知,brightness的范围是:20~255;代码通过服务管理器(ServiceManager)获得power服务,然后通过power服务设置亮度。

power.setBacklightBrightness的定义在:

rameworks/base/core/java/android/os/IPowerManager.aidl.java

frameworks/base/core/java/android/os/PowerManager.java

2, Power服务
文件:frameworks/base/core/java/android/os/Power.java

/**

* Brightness value for dim backlight

*/

public static final int BRIGHTNESS_DIM = 20;

/**

* Brightness value for fully on

*/

public static final int BRIGHTNESS_ON = 255;

文件:frameworks/base/core/java/android/os/PowerManager.java

/**

* sets the brightness of the backlights (screen, keyboard, button).

*

* @param brightness value from 0 to 255

*

* {@hide}

*/

public void setBacklightBrightness(int brightness)

{

try {

mService.setBacklightBrightness(brightness);

} catch (RemoteException e) {

}

}

电源管理器(powermager)将brightness转给电源服务,该服务位置如下:

文件:frameworks/base/services/java/com/android/server/PowerManagerService.java

public void setBacklightBrightness(int brightness) {

mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null);

// Don't let applications turn the screen all the way off

brightness = Math.max(brightness, Power.BRIGHTNESS_DIM);

mHardware.setLightBrightness_UNCHECKED(HardwareService.LIGHT_ID_BACKLIGHT, brightness,

HardwareService.BRIGHTNESS_MODE_USER);

mHardware.setLightBrightness_UNCHECKED(HardwareService.LIGHT_ID_KEYBOARD,

(mKeyboardVisible ? brightness : 0), HardwareService.BRIGHTNESS_MODE_USER);

mHardware.setLightBrightness_UNCHECKED(HardwareService.LIGHT_ID_BUTTONS, brightness,

HardwareService.BRIGHTNESS_MODE_USER);

long identity = Binder.clearCallingIdentity();

try {

mBatteryStats.noteScreenBrightness(brightness);

} catch (RemoteException e) {

Log.w(TAG, "RemoteException calling noteScreenBrightness on BatteryStatsService", e);

} finally {

Binder.restoreCallingIdentity(identity);

}

// update our animation state

if (ANIMATE_SCREEN_LIGHTS) {

mScreenBrightness.curValue = brightness;

mScreenBrightness.animating = false;

mScreenBrightness.targetValue = -1;

}

if (ANIMATE_KEYBOARD_LIGHTS) {

mKeyboardBrightness.curValue = brightness;

mKeyboardBrightness.animating = false;

mKeyboardBrightness.targetValue = -1;

}

if (ANIMATE_BUTTON_LIGHTS) {

mButtonBrightness.curValue = brightness;

mButtonBrightness.animating = false;

mButtonBrightness.targetValue = -1;

}

}

由以上代码可知,同时设置了背光、键盘、按钮的亮度。mHardware 是硬件服务,通过该服务调用底层与设备打交道的C\C++代码,setLightBrightness_UNCHECKED原型如下:

文件:frameworks/base/services\java\com\android\server\HardwareService.java

void setLightBrightness_UNCHECKED(int light, int brightness, int brightnessMode) {

int b = brightness & 0x000000ff;

b = 0xff000000 | (b << 16) | (b << 8) | b;

setLight_native(mNativePointer, light, b, LIGHT_FLASH_NONE, 0, 0, brightnessMode);

}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwxsww.html