전화가 잠들지 않도록 지원하도록 Android10 시스템 소스 코드 수정

1. 잠들지 않는 설정의 간단한 분석

Android 휴대폰의 " 설정 "애플리케이션에서 휴대폰 화면 시간 초과 기간을 설정할 수 있습니다. 아래 그림과 같이 영상옵션을 통해 최대 30 분까지 설정할 수 있음을 알 수 있습니다. 잠을 자지 않아도되는 경우 최대 값 등 화면 타임 아웃 시간을 충분히 크게 설정하여 목표를 달성 할 수 있습니다. of Int. 다음으로 소스 코드의 "설정"애플리케이션에서 어떻게 구현되는지 추적합니다. 소스 코드에서 "설정"응용 프로그램의 소스 경로는 다음과 같습니다.

packages/apps/Settings

키워드 검색 및 디렉토리 분석을 통해 화면 타임 아웃 설정을위한 소스 파일은 다음과 같습니다.

packages/apps/Settings/src/com/android/settings/display/TimeoutPreferenceController.java

" TimeoutPreferenceController.java "에서 화면 시간 제한을 수정하는 주요 기능은 다음과 같습니다.

 @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        try {
            int value = Integer.parseInt((String) newValue);
            //最终是调用这个函数实现的
            Settings.System.putInt(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;
    }

코드에서 화면 제한 시간이 다음 코드로 수정되었음을 알 수 있습니다.

Settings.System.putInt(getContentResolver(),Settings.System.SCREEN_OFF_TIMEOUT, 6000);

다음은 설정 응용 프로그램의 화면 시간 제한에 "절대 절전"기능을 추가합니다.

2. 수정과 관련된 문서

//添加永不休眠以及时间选项
packages/apps/Settings/res/values/arrays.xml

//添加中文展示的永不休眠选项
packages/apps/Settings/res/values/values-zh-rCN/arrays.xml
//Settings.System.putInt方法的实现类,根据传入的特殊值-1修改为一个很大的休眠时间
/frameworks/base/core/java/android/provider/Settings.java

셋, 실제 전투 수정

1. 설정 앱에서 잠들지 않는 옵션 추가

packages / apps / Settings / res / values ​​/ arrays.xml에 다음 콘텐츠를 추가합니다.

  <string-array name="screen_timeout_entries">
      <item>15 seconds</item>
      <item>30 seconds</item>
      <item>1 minute</item>
      <item>2 minutes</item>
      <item>5 minutes</item>
      <item>10 minutes</item>
      <item>30 minutes</item>
      <!-- ///ADD START 此处新增的英文语言下Never展示项-->
      <item>Never</item>
      <!-- ///ADD END -->
      
  </string-array>

  <!-- Do not translate. -->
  <string-array name="screen_timeout_values" translatable="false">
      <!-- Do not translate. -->
      <item>15000</item>
      <!-- Do not translate. -->
      <item>30000</item>
      <!-- Do not translate. -->
      <item>60000</item>
      <!-- Do not translate. -->
      <item>120000</item>
      <!-- Do not translate. -->
      <item>300000</item>
      <!-- Do not translate. -->
      <item>600000</item>
      <!-- Do not translate. -->
      <item>1800000</item>
      <!-- ///ADD START 此处新增的休眠时间-1-->
      <item>-1</item>
      <!-- ///ADD END -->
  </string-array>

packages / apps / Settings / res / values ​​/ values-zh-rCN / arrays.xml 은 다음 콘텐츠를 추가합니다.

<string-array name="screen_timeout_entries">
 <item msgid="8386012403457852396">"15 秒"</item>
 <item msgid="4572123773028439079">"30 秒"</item>
 <item msgid="7016081293774377048">"1 分钟"</item>
 <item msgid="838575533670111144">"2 分钟"</item>
 <item msgid="2693197579676214668">"5 分钟"</item>
 <item msgid="1955784331962974678">"10 分钟"</item>
 <item msgid="5578717731965793584">"30 分钟"</item>
 <!-- ///ADD START 此处新增的中文语言展示选择项-->
 <item>永不睡觉</item>
 <!-- ///ADD END -->
</string-array>

2. Settings.java 파일에서 설정된 절전 시간을 수정합니다.

파일에서 Settings.System.putInt 메서드를 찾아 다음과 같이 연결된 메서드 코드를 수정합니다.

//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);
      }

네, 효과 표시

수정 후 기계를 컴파일하고 플래시 한 후 기계를 테스트하고 잠을 자지 않고 하루 동안 끊었습니다. 사진보기 :

영상

 

Android10 시스템 소스 코드 커널 사용자 정의 개발부터 시작까지

EdXposed ART 후크 프레임 워크 사용 방법

adb 명령을 사용하여 Magisk없이 Edxposed 설치

Android10 시스템 사용자 정의 개발 수정 Android 소스 코드 닫기 Selinux

 

거물들은 떠나기 전에 염려하고 후속 멋진 기사는 계속됩니다영상

영상

추천

출처blog.csdn.net/u011426115/article/details/112689536