android4.4 锁屏灭屏时间的设置
来源:互联网 发布:成都纵横无人机 知乎 编辑:程序博客网 时间:2024/06/06 05:45
屏幕自动灭屏的时间和userActivity事件相关,而这个灭屏时间的获取是在PowerManagerService中getScreenOffTimeoutLocked函数。
private int getScreenOffTimeoutLocked() { int timeout = mScreenOffTimeoutSetting; if (isMaximumScreenOffTimeoutFromDeviceAdminEnforcedLocked()) { timeout = Math.min(timeout, mMaximumScreenOffTimeoutFromDeviceAdmin); } if (mUserActivityTimeoutOverrideFromWindowManager >= 0) { timeout = (int)Math.min(timeout, mUserActivityTimeoutOverrideFromWindowManager); } return Math.max(timeout, MINIMUM_SCREEN_OFF_TIMEOUT); }我们先来看下mScreenOffTimeoutSetting这个变量,如果没有设置的话,默认是DEFAULT_SCREEN_OFF_TIMEOUT常量为15秒。
mScreenOffTimeoutSetting = Settings.System.getIntForUser(resolver, Settings.System.SCREEN_OFF_TIMEOUT, DEFAULT_SCREEN_OFF_TIMEOUT, UserHandle.USER_CURRENT);而keyguard的灭屏时间和mUserActivityTimeoutOverrideFromWindowManager值有关。
下面我们来看看这个值是哪里来的?
我在WMS的performLayoutAndPlaceSurfacesLockedInner函数中,会调用如下函数。
mPowerManager.setUserActivityTimeoutOverrideFromWindowManager( mInnerFields.mUserActivityTimeout);这个函数最终就会设置mUserActivityTimeoutOverrideFromWindowManager。
public void setUserActivityTimeoutOverrideFromWindowManager(long timeoutMillis) { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null); final long ident = Binder.clearCallingIdentity(); try { setUserActivityTimeoutOverrideFromWindowManagerInternal(timeoutMillis); } finally { Binder.restoreCallingIdentity(ident); } } private void setUserActivityTimeoutOverrideFromWindowManagerInternal(long timeoutMillis) { synchronized (mLock) { if (mUserActivityTimeoutOverrideFromWindowManager != timeoutMillis) { mUserActivityTimeoutOverrideFromWindowManager = timeoutMillis; mDirty |= DIRTY_SETTINGS; updatePowerStateLocked(); } } }而在WMS调用PowerManagerService的setUserActivityTimeoutOverrideFromWindowManager的参数mInnerFields.mUserActivityTimeout其实也是WindowState的mAttrs(WindowManager.LayoutParams)的userActivityTimeout变量。
mInnerFields.mUserActivityTimeout = w.mAttrs.userActivityTimeout;
而这个变量就是在KeyguardViewManager.java中设置的,因此到这里我们就知道这个值就是在Keyguard窗口起来的时候设置的,而由于这个值默认值是-1,其他窗口起来时,也把窗口的userActivityTimeout设置到PowerManagerService中去了,这时mUserActivityTimeoutOverrideFromWindowManager为-1。也就是说只有在keyguard的时候这个值才不是-1.
private void updateUserActivityTimeoutInWindowLayoutParams() { // Use the user activity timeout requested by the keyguard view, if any. if (mKeyguardView != null) { long timeout = mKeyguardView.getUserActivityTimeout(); if (timeout >= 0) { mWindowLayoutParams.userActivityTimeout = timeout; return; } } // Otherwise, use the default timeout. mWindowLayoutParams.userActivityTimeout = KeyguardViewMediator.AWAKE_INTERVAL_DEFAULT_MS; }
而我们修改锁屏的时间,就是先修改KeyguardViewMediator.AWAKE_INTERVAL_DEFAULT_MS这个值。
然后在PowerManagerService中的getScreenOffTimeoutLocked函数中,当这个时候在锁屏界面时,因为是keyguard界面,这时候WMS会调用PowerManagerService的setUserActivityTimeoutOverrideFromWindowManager函数来设置mUserActivityTimeoutOverrideFromWindowManager,因此这个时候mUserActivityTimeoutOverrideFromWindowManager不为-1.这个时候我们可以将timeout直接设置为mUserActivityTimeoutOverrideFromWindowManager(Keyguard设置的屏幕锁屏时间),而不用和PowerManagerService现在的timeout对比,最后在锁屏的时候灭屏的timeout就会变成我们设置的时间了。
private int getScreenOffTimeoutLocked() { int timeout = mScreenOffTimeoutSetting; if (isMaximumScreenOffTimeoutFromDeviceAdminEnforcedLocked()) { timeout = Math.min(timeout, mMaximumScreenOffTimeoutFromDeviceAdmin); } if (mUserActivityTimeoutOverrideFromWindowManager >= 0) { timeout = (int)mUserActivityTimeoutOverrideFromWindowManager;//设置为keyguard设置的timeout } int lockedtimeout = Math.max(timeout, MINIMUM_SCREEN_OFF_TIMEOUT); return lockedtimeout; }
阅读全文
1 0
- android4.4 锁屏灭屏时间的设置
- android4.4 systemUI设置
- android4.4 亮度设置
- Android4.4.2 获取NTP时间,并设置系统时间
- android4.4的设置菜单里面的系统默认配置
- Android4.4添加设置菜单
- android4.4设置默认launcher
- Android4.4 平板背光设置
- android4.4默认输入法设置
- 设置Android系统的状态栏颜色(从Android4.4开始)
- Android4.4设置windowSoftInputMode失效问题的解决方案
- Android4.1系统设置时间格式默认为24小时
- android4.4中自动更新时间机制
- android4.4中自动更新时间机制
- Android4.4-settings系统动画时间修改
- Android4.4设置源码分析(一):设置主界面与各模块之间的联系
- Android4.4 背光亮度最低设置
- android4.4以上,实现状态栏颜色设置
- C#回顾学习笔记十四:C#中自定义方法与调用方法
- python/java 网站记载
- 安卓面试总结
- C# 自定义窗体移动窗体的方法
- Python之生成器/迭代器
- android4.4 锁屏灭屏时间的设置
- Ansible配置100个新IP节点该怎么办?
- Kerberos Ticket Renewer无法启动-----解决方法
- 定义函数
- Qt控件之QLabel简单应用
- TexturePacker使用详解
- java new date()获取前一(几)天时间后一(几)天
- Zhu and 772002 HDU
- android中bundle的使用