对于非手机设备,有时候用户需要不锁屏不休眠,源码修改方式如下:
1.在frameworks\base\packages\SettingsProvider\res\values\defaults.xml里面
<bool name="def_lockscreen_disabled">true</bool>
<integer name="def_screen_off_timeout">2147483647</integer>
<integer name="def_sleep_timeout">-1</integer>
2.在frameworks\base\core\res\res\values\config.xml里面
<bool name="config_disableLockscreenByDefault">true</bool>
修改了这几个属性值后,系统开机后一般就不会进入锁屏和灭屏状态了。
注意:一般在RK的源码里面,通常会有overlay方式,有些时候修改了frameworks里面的def_screen_off_timeout值发现没有作用,所以需要修改overlay里面的配置,一般overlay路径如下:
device\rockchip\common\overlay\frameworks\base\packages\SettingsProvider\res\values\defaults.xml
device\rockchip\common\overlay_screenoff\frameworks\base\packages\SettingsProvider\res\values\defaults.xml
device\rockchip\rk35xx\overlay\frameworks\base\packages\SettingsProvider\res\values\defaults.xml
需要修改这里面的overlay配置这样修改就会生效了。
3.最暴力的方式修改:
直接修改frameworks\base\services\core\java\com\android\server\power\PowerManagerService.java
把系统休眠直接给禁止掉,这种情况适用于不带电池的设备,且自定义了launcher,不希望进入系统锁屏界面。修改如下:
在void readConfigurationLocked()方法里面:
java
// mMinimumScreenOffTimeoutConfig = resources.getInteger(
// com.android.internal.R.integer.config_minimumScreenOffTimeout);
mMinimumScreenOffTimeoutConfig = 2147483600L;
直接把mMinimumScreenOffTimeoutConfig修改为最大,在goToSleepInternal方法里面直接return掉休眠功能:
java
private void goToSleepInternal(IntArray groupIds, long eventTime, int reason, int flags) {
boolean isExit = true;
if(isExit)
return;
final long now = mClock.uptimeMillis();
if (eventTime > now) {
Slog.e(TAG, "Event time " + eventTime + " cannot be newer than " + now);
throw new IllegalArgumentException("event time must not be in the future");
}
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER,
/* message= */ null);
boolean isNoDoze = (flags & PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE) != 0;
int uid = Binder.getCallingUid();
final long ident = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
for (int i = 0; i < groupIds.size(); i++) {
int groupId = groupIds.get(i);
PowerGroup powerGroup = mPowerGroups.get(groupId);
if (powerGroup == null) {
throw new IllegalArgumentException("power group(" + groupId
+ ") doesn't exist");
}
if ((flags & PowerManager.GO_TO_SLEEP_FLAG_SOFT_SLEEP) != 0) {
if (mFoldGracePeriodProvider.isEnabled()) {
if (!powerGroup.hasWakeLockKeepingScreenOnLocked()) {
mNotifier.showDismissibleKeyguard();
}
continue; // never actually goes to sleep for SOFT_SLEEP
} else {
if (powerGroup.hasWakeLockKeepingScreenOnLocked()) {
continue;
}
}
}
if (isNoDoze) {
sleepPowerGroupLocked(powerGroup, eventTime, reason, uid);
} else {
dozePowerGroupLocked(powerGroup, eventTime, reason, uid);
}
}
}
} finally {
Binder.restoreCallingIdentity(ident);
}
}
变成永不休眠了,因为在Android15上面自定义launcher后容易出现进入系统锁屏屏保界面。