我们可以通过adb shell dumpsys power来查看设备的亮度、电源相关的属性,本文主要罗列一些重要的属性:
POWER MANAGER (dumpsys power)
1.mDirty=0x0//占位符,用来表示当前发生改变的事件类型,有以下值:
0 //未发生改变
private static final int DIRTY_WAKE_LOCKS = 1 << 0;//wake lock发生改变
private static final int DIRTY_WAKEFULNESS = 1 << 1; //mWakefulness发生改变,mWakefulness表示设备是处于唤醒(awake)状态还是睡眠(dream)状态或介于两者之间(dim)
private static final int DIRTY_USER_ACTIVITY = 1 << 2; //user activity已超时
private static final int DIRTY_ACTUAL_DISPLAY_POWER_STATE_UPDATED = 1 << 3; //实际显示电源状态被异步更新
private static final int DIRTY_BOOT_COMPLETED = 1 << 4; //开机完成状态发生改变
private static final int DIRTY_SETTINGS = 1 << 5; //设置发生改变
private static final int DIRTY_IS_POWERED = 1 << 6; //mIsPowered变化,mIsPowered表示是否在充电
private static final int DIRTY_STAY_ON = 1 << 7; //mStayOn发生变化,mStayOn表示是否保持常亮
private static final int DIRTY_BATTERY_STATE = 1 << 8; //电量发生变化
private static final int DIRTY_PROXIMITY_POSITIVE = 1 << 9; //距离传感器
private static final int DIRTY_DOCK_STATE = 1 << 10;//底座
private static final int DIRTY_SCREEN_BRIGHTNESS_BOOST = 1 << 11; //电量增强
private static final int DIRTY_QUIESCENT = 1 << 12; //sQuiescent变化,sQuiescent为true表示用户操作之前灯应该保持关闭
private static final int DIRTY_VR_MODE_CHANGED = 1 << 13;//VR模式变化
private static final int DIRTY_ATTENTIVE = 1 << 14;// 在用户长时间不活动后设备进入睡眠状态之前向用户显示警告消息的时间,即使保持唤醒锁。
2.mWakefulness=Dreaming //这个是标识系统当前状态的,共有四种状态:
WAKEFULNESS_ASLEEP:表示系统当前处于休眠状态,只能被wakeUp()调用唤醒。
WAKEFULNESS_AWAKE:表示系统目前处于正常运行状态。
WAKEFULNESS_DREAMING:表示系统当前正处于屏保的状态。
WAKEFULNESS_DOZING:表示系统正处于“doze”状态。这种状态下只有低耗电的“屏保”可以运行,其他应用进程都被挂起。
变化的顺序:Awake ->Dozing -> Dreaming-asleep 。
3.mWakefulnessChanging=false //表示上一个参数mWakefulness是否发生变化,如果变化这个参数会被改成true,然后切换屏幕状态
mIsPowered=true //是否在充电,true表示在充电中
mPlugType=1 //充电类型:1表示电源是交流充电器、2表示电源是一个USB端口、3表示电源是无线的
mBatteryLevel=100 //电量
mBatteryLevelWhenDreamStarted=100 //进入dream时的电量
mDockState=0 //表示设备是否有底座,0表示没有
mProximityPositive=false //距离传感器(打电话的时候,手机贴到脸上就灭屏),如果需要进入屏保,这个值也必须是false
mBootCompleted=true // 是否开机完成
mSystemReady=true //系统是否准备好
mHalAutoSuspendModeEnabled=false //是否处于自动挂起模式
mHalInteractiveModeEnabled=true //是否处于交互模式
mNotifyLongScheduled=+51s603ms //是否有一条消息来检查长时间的wake lock
mNotifyLongDispatched=-8s399ms//上次检查长时间wake lock的时间
mNotifyLongNextCheck=(none) //下一次检查长时间wake lock时间
mBatteryLevelLow=false //电池是否是低电状态
mLastUserActivityTime=745577 (531202 ms ago) //上次用户活动的时间
mLastUserActivityTimeNoChangeLights=722593 (554186 ms ago)
mLastInteractivePowerHintTime=745577 (531202 ms ago) //上次交互电源提示的时间戳。
mLastScreenBrightnessBoostTime=0 (1276779 ms ago) 最近一次自动调节屏幕亮度的时间(就是手机由黑暗的地方进入明亮的地方,手机屏幕会自动调整到最大亮度)
mScreenBrightnessBoostInProgress=false 是否正在进行屏幕亮度调整
4.mStayOn=false //屏幕是否需要长亮。要想无操作进入屏保,这个值必须是false
5.mWakeLockSummary=0x3 是否有wake lock锁,没有锁的话这个值是0
private static final int WAKE_LOCK_CPU = 1 << 0;
private static final int WAKE_LOCK_SCREEN_BRIGHT = 1 << 1;
private static final int WAKE_LOCK_SCREEN_DIM = 1 << 2;
private static final int WAKE_LOCK_BUTTON_BRIGHT = 1 << 3;
private static final int WAKE_LOCK_PROXIMITY_SCREEN_OFF = 1 << 4;
private static final int WAKE_LOCK_STAY_AWAKE = 1 << 5; // only set if already awake
private static final int WAKE_LOCK_DOZE = 1 << 6;
private static final int WAKE_LOCK_DRAW = 1 << 7;
6.mUserActivitySummary=0x4 //用户活动事件标志
0x1:private static final int USER_ACTIVITY_SCREEN_BRIGHT = 1 << 0;
0x2:private static final int USER_ACTIVITY_SCREEN_DIM = 1 << 1;
0x4:private static final int USER_ACTIVITY_SCREEN_DREAM = 1 << 2;
//这只表示Activity的状态,举例说5分钟无按键操作进入屏保,过了5 分钟了,则这个状态就会变成 USER_ACTIVITY_SCREEN_DREAM 。但是,这仅仅是Activity的判断可以进入Dreaming了,还需要看其他的标志位。例如,mWakeLockSummary,mStayOn等等的值,
//具体参考isBeingKeptAwakeLocked()函数。
7.mSandmanScheduled //如果已安排 MSG_SANDMAN(进入屏保或者doze模式的主要方法),则为真。
mSandmanSummoned //表示是否应该进入dream 或者doze模式
8.mLightDeviceIdleMode=false //当前设备是否处于轻型idle模式
mDeviceIdleMode=false //当前设备是否处于idle模式
mDeviceIdleWhitelist=[2000, 10017, 10044, 10057, 10058] // 设备在IDLE状态下的app白名单
mDeviceIdleTempWhitelist=[]//idle临时白名单
9.mLastWakeTime=645259 (631520 ms ago) //表示上次屏幕点亮的事件 631520 ms ago 表示距离当前时间
mLastSleepTime=0 (1276779 ms ago) // 上次屏幕灭屏时间
mLastSleepReason=application //设备上次进入sleep的原因
10.mDisplayReady=true 显示器是否准备OK
11.mHoldingWakeLockSuspendBlocker=true 是否持有阻止CPU休眠的锁
mHoldingDisplaySuspendBlocker=true 是否持有阻止显示器息屏的锁
12.Settings and Configuration:设置菜单里的配置
mDecoupleHalAutoSuspendModeFromDisplayConfig=false //是否将自动挂起模式与显示状态分离。
mDecoupleHalInteractiveModeFromDisplayConfig=false //是否将交互模式与显示状态分离。
mWakeUpWhenPluggedOrUnpluggedConfig=false //是否将设备在插入或拔出时唤醒。
mWakeUpWhenPluggedOrUnpluggedInTheaterModeConfig=false //剧院模式下是否将设备在插入或拔出时唤醒。
mTheaterModeEnabled=false //是否启用剧院模式
mSuspendWhenScreenOffDueToProximityConfig=false //设备因接近而关闭屏幕时是否暂停。
mDreamsSupportedConfig=true //是否支持dream屏保
mDreamsEnabledByDefaultConfig=true //默认情况下,屏保是否可用
mDreamsActivatedOnSleepByDefaultConfig=false //休眠时是否启用屏保的默认值
mDreamsActivatedOnDockByDefaultConfig=true //插入底座时屏保是否激活的默认值
mDreamsEnabledOnBatteryConfig=false //放电时是否允许进入屏保
mDreamsBatteryLevelMinimumWhenPoweredConfig=-1 //充电时允许屏保的最低电量,使用-1禁用此功能
mDreamsBatteryLevelMinimumWhenNotPoweredConfig=15 //放电时允许屏保的最低电量,使用-1禁用此功能,默认15
mDreamsBatteryLevelDrainCutoffConfig=5 //电亮下降到该百分点,当用户活动超时后不进入屏保,默认5
mDreamsEnabledSetting=true //屏保是否支持
mDreamsActivateOnSleepSetting=true //休眠时是否启用屏保
mDreamsActivateOnDockSetting=true //插入基座时屏保是否激活
mDozeAfterScreenOff=false //如果为true,则直到关闭屏幕并执行屏幕关闭动画之后,才开始Doze,默认false
mMinimumScreenOffTimeoutConfig=10000 //用户活动超时的最小时间,默认10000ms,必须大于0
mMaximumScreenDimDurationConfig=7000 //用户活动超时进入且关闭屏幕前屏幕变暗的最大时间,默认7000ms,必须大于0
mMaximumScreenDimRatioConfig=0.20000005 //屏幕变暗的时长比例,如果用于超时时间过短,则在7000ms的基础上按还比例减少,默认20%
mAttentiveTimeoutConfig=-1 //设备进入睡眠状态后用户长时间不活动的时间,即使保持唤醒锁,-1表示禁用
mAttentiveTimeoutSetting=-1 //设备进入睡眠状态后用户长时间不活动的时间,即使保持唤醒锁,-1表示禁用
mAttentiveWarningDurationConfig=30000 //在用户长时间不活动后设备进入睡眠状态之前向用户显示警告消息的时间
mScreenOffTimeoutSetting=120000 //设备在一段时间不活动后进入休眠或者屏保状态的时间
mSleepTimeoutSetting=3600000 //设备在一段时间不活动后完全进入休眠状态之前的超时时间,值必须大于SCREEN_OFF_TIMEOUT,否则设置了屏保后来不及显示屏保就sleep
mMaximumScreenOffTimeoutFromDeviceAdmin=9223372036854775807 (enforced=false)//根据设备管理策略允许的最大屏幕关闭超时时间,这个值是默认值 LONG.MAX_VALUE
mStayOnWhilePluggedInSetting=0 //充电时屏幕一直亮着
mScreenBrightnessModeSetting=0 //亮度调节模式,自动1,正常0
mScreenBrightnessOverrideFromWindowManager=NaN // 来自窗口管理器的屏幕亮度设置覆盖,以允许当前前台活动覆盖亮度。
mUserActivityTimeoutOverrideFromWindowManager=-1 // 来自窗口管理器的用户活动超时覆盖,以允许当前前台活动覆盖用户活动超时。 -1表示禁用。
mUserInactiveOverrideFromWindowManager=false // 窗口管理器通过其他方式确定用户处于非活动状态。 将此设置为 false 以禁用。
mDozeScreenStateOverrideFromDreamManager=0 //在doze模式下的屏幕状态
mDrawWakeLockOverrideFromSidekick=false //在doze模式下保持显示状态。
mDozeScreenBrightnessOverrideFromDreamManager=-1 //在doze模式下使用的屏幕亮度
mScreenBrightnessSettingMinimumFloat=0.035433073 //屏幕最小亮度值
mScreenBrightnessSettingMaximumFloat=1.0 //屏幕最大亮度值
mScreenBrightnessSettingDefaultFloat=0.39763778 //默认屏幕亮度
mDoubleTapWakeEnabled=false //双击唤醒功能是否启用
mIsVrModeEnabled=false //vr模式是否启用
mForegroundProfile=0 //当前用户的主要配置文件的用户 ID(不包括托管配置文件)
mUserId=0 //与用户当前正在交互的活动相对应的用户 ID。
Attentive timeout: -1 ms //设备进入睡眠状态后用户长时间不活动的时间,即使保持唤醒锁,-1表示禁用
Sleep timeout: 3600000 ms //设备进入sleep模式的时间
Screen off timeout: 120000 ms //设备进入屏保的时间
Screen dim duration: 7000 ms //设备进入屏保之前变暗的这个过程