AndroidQ增加螢屏永不超時
由于本比較菜,原始碼的理解不到位,無法精準對癥下藥,找了三種方案一個一個試把,
第一個方案
1:先修改res/values/arrays.xml
該檔案中保存的是陣列資源,哪種方案都是需要改的,
30 minutes
//增加改選項,為頁面上看的到的陣列選項
Never
1800000
//增加選項2147483647為int最大值
2147483647
2:修改 src/com/android/settings/display/TimeoutListPreference.java

最后修改src/com/android/settings/display/TimeoutPreferenceController.java

第二種方法
1:packages/apps/Settings/res/values/arrays.xml
30 minutes
//下面為新增
Never
1800000
-1 //如果-1編譯會報錯則看另一種方案
2:然后在Settings.java檔案中修改設定的休眠時間
//putInt最終呼叫的是putIntForUser
public static boolean putInt(ContentResolver cr, String name, int value) {
return putIntForUser(cr, name, value, cr.getUserId());
}
//putIntForUser中根據傳入的name和value特殊值-1進行修改設定
/** @hide */
@UnsupportedAppUsage
public static boolean putIntForUser(ContentResolver cr, String name, int value,int userHandle) {
///ADD START
if(name.equals(SCREEN_OFF_TIMEOUT))
{
//-1說明是我們在設定中添加的永不休眠的值
if(value==-1)
{
//
Log.d(“Settings”,“change screen timeout for:”+Integer.toString(Integer.MAX_VALUE-1000));
return putStringForUser(cr, name, Integer.toString(Integer.MAX_VALUE-1000), userHandle);
}
}
///ADD END
return putStringForUser(cr, name, Integer.toString(value), userHandle);
}
另一種方案Android8的
1:packages/apps/Settings/res/values/arrays.xml
30 minutes
never
1800000
2147483647
2:packages/apps/Settings/src/com/android/settings/display/TimeoutPreferenceController.java
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
try {
long value = Long.parseLong((String) newValue); //int修改成long
Settings.System.putLong(mContext.getContentResolver(), SCREEN_OFF_TIMEOUT, value);
updateTimeoutPreferenceDescription((TimeoutListPreference) preference, value);
} catch (NumberFormatException e) {
Log.e(TAG, “could not persist screen timeout setting”, e);
}
return true;
}
…
private void updateTimeoutPreferenceDescription(TimeoutListPreference preference,
long currentTimeout) {
final CharSequence[] entries = preference.getEntries();
final CharSequence[] values = preference.getEntryValues();
final String summary;
if (preference.isDisabledByAdmin()) {
summary = mContext.getString(com.android.settings.R.string.disabled_by_policy_title);
} else {
final CharSequence timeoutDescription = getTimeoutDescription(
currentTimeout, entries, values);
// add code start
//if( currentTimeoutjava.lang.Integer.MAX_VALUE){
// summary = entries[best].toString();
// }
if(currentTimeout2147483647){
summary=timeoutDescription.toString();
}else{ //add code
summary = timeoutDescription == null
? “”
: mContext.getString(R.string.screen_timeout_summary, timeoutDescription);
}//add code
}
preference.setSummary(summary);
}
根據資料庫設定永不滅屏
本小白實習時搞過小段時間的java后端,對操作資料庫的方式比較容易理解和認可
1:frameworks/base/packages/SettingsProvider/res/values/defaults.xml
true
- 1800000
- 0
-1
false
false
2:frameworks/base/services/core/java/com/android/server/power/PowerManagerService.java
private int getScreenOffTimeoutLocked(int sleepTimeout) {
int timeout = mScreenOffTimeoutSetting;
-
if(timeout == 0){ -
//rk3288 7.1比較特殊,這是是timeout為0代表不滅屏,一般android此值為-1,具體為多少需要查看Setting的DisplaySettings.java原始碼,比如我的是

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/263847.html
標籤:其他
下一篇:前端面試題2
