android防止程序休眠,android 设置 永不休眠

如果想第一次烧录系统开机就是永不休眠。这个需要修改def_screen_off_timeout = -1,在android 第一次开机的时候会去读取这个值,

在文件SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java

loadIntegerSetting(stmt, Settings.System.SCREEN_OFF_TIMEOUT,

R.integer.def_screen_off_timeout);

中将def_screen_off_timeout 保存在数据库中SCREEN_OFF_TIMEOUT = def_screen_off_timeout,

当启动设置应用时,路径(package/apps/Settings)

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

........

final long currentTimeout = getTimoutValue();

.......

updateTimeoutPreferenceDescription(currentTimeout);

private int getTimoutValue() {

int currentValue = Settings.System.getInt(getActivity()

.getContentResolver(), SCREEN_OFF_TIMEOUT,

FALLBACK_SCREEN_TIMEOUT_VALUE);

Xlog.d(TAG, "getTimoutValue()---currentValue=" + currentValue);

int bestMatch = 0;

int timeout = 0;

final CharSequence[] valuesTimeout = mScreenTimeoutPreference

.getEntryValues();

for (int i = 0; i < valuesTimeout.length; i++) {

timeout = Integer.parseInt(valuesTimeout[i].toString());

if (currentValue == timeout) {

return currentValue;

} else {

if (currentValue > timeout) {

bestMatch = i;

}

}

}

Xlog.d(TAG, "getTimoutValue()---bestMatch=" + bestMatch);

return Integer.parseInt(valuesTimeout[bestMatch].toString()); }

读取数据中SCREEN_OFF_TIMEOUT 的值并更新到设置应用中。

在文件 PowerManagerService.java的函数 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);

}

修改后

private int getScreenOffTimeoutLocked() {

int nosleep;

int timeout = mScreenOffTimeoutSetting;

if (isMaximumScreenOffTimeoutFromDeviceAdminEnforcedLocked()) {

timeout = Math.min(timeout, mMaximumScreenOffTimeoutFromDeviceAdmin);

}

if (mUserActivityTimeoutOverrideFromWindowManager >= 0) {

timeout = (int)Math.min(timeout, mUserActivityTimeoutOverrideFromWindowManager);

}

nosleep = mScreenOffTimeoutSetting;

if(nosleep < 0) {

nosleep = mMaximumScreenOffTimeoutFromDeviceAdmin ;

return Math.max(nosleep, mMaximumScreenOffTimeoutFromDeviceAdmin);

}

return Math.max(timeout, MINIMUM_SCREEN_OFF_TIMEOUT);

}

这个函数会在设置时间有改动的时候被调用,

mMaximumScreenOffTimeoutFromDeviceAdmin 为系统支持最大不休眠的时间 大概为2147483647 ,大概200小时 。远远超过我们的电池电量的时间。

修改设置应用的代码 Settings/res/values/arrays.xml

never

15 seconds

30 seconds

1 minute

2 minutes

5 minutes

10 minutes

30 minutes

第一行添加 never

-1

15000

30000

60000

120000

300000

600000

1800000

第一行添加 -1

res/values-zh-rCN/arrays.xml 中 添加第一行

"永不 休眠"

"15 秒"

"30 秒"

"1 分钟"

"2 分钟"

"5 分钟"

"10 分钟"

"30 分钟"

在函数 updateTimeoutPreferenceDescription 中修改

if (currentTimeout < 0) {

// Unsupported value

summary = "";

}

改为

if (currentTimeout < -1)

在下面代码中添加

if (entries.length != 0) {

summary = preference.getContext().getString(

R.string.screen_timeout_summary, entries[best]);

//add new code

if(currentTimeout < 0)

summary =entries[best].toString();

//end new code

} else {

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值