首页 / 操作系统 / Linux / Android LCD和键盘 背光亮度设置
亮度设置
应用设计
1.1 设置进度条范围
背光设置是在:设置->声音和显示->亮度,通过进度条来设置的。文件:packages/apps/Settings/src/com/Android/settings/BrightnessPreference.javaprivate 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.java1.2 设置亮度
文件:packages/apps/Settings/src/com/android/settings/BrightnessPreference.javapublic 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.javaframeworks/base/core/java/android/os/PowerManager.java2, 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.javapublic 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 是硬件服务,通过该服务调用底层与设备打交道的CC++代码,setLightBrightness_UNCHECKED原型如下:文件:frameworks/base/servicesjavacomandroidserverHardwareService.javavoid 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); }