文章目录

  • 1. 前言
  • 2. 默认关闭数据
  • 3. 默认关闭蓝牙
  • 4. 默认关闭定位
  • 5. 默认关闭飞行模式
  • 6. 默认关闭wifi
  • 7. 默认关闭USB调试
  • 8. 默认息屏时间修改
  • 9. 默认亮度修改
  • 10. 默认关闭自动旋转屏幕
  • 11. 默认时区设置为中国
  • 12. 默认语言改为中文
  • 13. 默认允许安装未知来源应用
  • 14. 默认输入法修改
  • 15. 默认浏览器主页修改
  • 16. 默认系统声音/大小修改
  • 17. 默认系统亮度修改
  • 18. 默认字体修改
  • 19. 默认声音修改


1. 前言

系统设置默认值修改,仅为做个记录,方便后续回顾。

ps:有可能遇到查询数据时候发现修改的值是成功了,但是效果没有,这可能是在上层被处理导致的结果。

2. 默认关闭数据

frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.java

private void loadGlobalSettings(SQLiteDatabase db) {
     ......
 	loadSetting(stmt, Settings.Global.MOBILE_DATA,false);
 	......
}

3. 默认关闭蓝牙

frameworks/base/packages/SettingsProvider/res/values/defaults.xml

<bool name="def_bluetooth_on">false</bool>

4. 默认关闭定位

frameworks/base/packages/SettingsProvider/res/values/defaults.xml

<string name="def_location_providers_allowed" translatable="false">gps</string>
修改为
<string name="def_location_providers_allowed" translatable="false"></string>

5. 默认关闭飞行模式

frameworks/base/packages/SettingsProvider/res/values/defaults.xml

<bool name="def_airplane_mode_on">false</bool>

6. 默认关闭wifi

frameworks/base/packages/SettingsProvider/res/values/defaults.xml

<bool name="def_wifi_on">false</bool>

7. 默认关闭USB调试

frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.java

private void loadSecureSettings(SQLiteDatabase db) {
    //省略
	loadSetting(stmt, Settings.Secure.ADB_ENABLED, 0);
	//省略
}

8. 默认息屏时间修改

frameworks/base/packages/SettingsProvider/res/values/defaults.xml

单位为毫秒,这里修改为10天不息屏。

<integer name="def_screen_off_timeout">864000000</integer>

ps:值为-1的时候为永不灭屏

9. 默认亮度修改

frameworks/base/packages/SettingsProvider/res/values/defaults.xml

如想把手机的默认亮度调整为90%,则

<integer name="def_screen_brightness">102</integer> 
修改为
   <integer name="def_screen_brightness">230</integer>

ps:全亮是255,255*90%=229.5,取整就是230

10. 默认关闭自动旋转屏幕

frameworks/base/packages/SettingsProvider/res/values/defaults.xml

<bool name="def_accelerometer_rotation">false</bool>

11. 默认时区设置为中国

预置属性:

persist.sys.timezone = Asia/Shanghai

12. 默认语言改为中文

修改build/target/product/full_base.mk:

PRODUCT_LOCALES := zh_CN

13. 默认允许安装未知来源应用

frameworks/base/packages/SettingsProvider/res/values/defaults.xml

<bool name="def_install_non_market_apps">true</bool>

14. 默认输入法修改

跟输入法相关的两个数据库变量:
Settings.Secure.ENABLED_INPUT_METHODS 使用/启用输入法, 这会显示在设置中的输入法列表
Settings.Secure.DEFAULT_INPUT_METHOD 默认输入法

#显示系统安装的输入法列表
ime list -s

#获取系统默认输入法
settings get secure default_input_method

修改位置:
framworks/base/services/java/com/android/server/InputMethodManagerService.java

public InputMethodManagerService(Context context, WindowManagerService windowManager) {
			Settings.Secure.putString(context.getContentResolver(),Settings.Secure.ENABLED_INPUT_METHODS ,"com.hisilicon.android.inputmethod.remote/.RemoteIME");
			Settings.Secure.putString(context.getContentResolver(),Settings.Secure.DEFAULT_INPUT_METHOD,"com.hisilicon.android.inputmethod.remote/.RemoteIME");
}

15. 默认浏览器主页修改

修改位置:
packages/apps/Browser/res/values/strings.xml

<!-- The default homepage. -->
 <string name="homepage_base" translatable="false">
https://www.google.com/webhp?client={CID}&source=android-home</string>

将默认的链接google修改成百度:

<string name="homepage_base" translatable="false">
https://www.baidu.com/</string>

16. 默认系统声音/大小修改

在做定制需求的时候,可能需要修改系统通知的声音,将其禁用掉,避免第三方应用发送通知时,声音很大,吓着用户。索性就把通知声音关掉。下面就说说关闭声音的几种方法,以及修改系统默认声音的方法。

1.直接修改系统层默认的声音大小

在系统代码 frameworks/base/media/java/android/media/AudioService.java 的开头定义了两个数组,一个 MAX_STREAM_VOLUME 这里面定义了各种声音的最大值( 最大值不是100 ,所以需要 AudioManager.getStreamMaxVolume(type) 来获取各个音量的最大值),然后进行设置。

还定义了一个数组 DEFAULT_STREAM_VOLUME 这里面则和 MAX_STREAM_VOLUME 里定义的顺序是一样,表明了各种声音的默认的大小。此块代码如下:

/** @hide Maximum volume index values for audio streams */
 private static int[] MAX_STREAM_VOLUME = new int[] {
     5,  // STREAM_VOICE_CALL
     7,  // STREAM_SYSTEMX_STREAM_VOLUMEMAX_STREAM_VOLUMEMAX_STREAM_VOLUME
     7,  // STREAM_RING
     15, // STREAM_MUSIC
     7,  // STREAM_ALARM
     7,  // STREAM_NOTIFICATION
     15, // STREAM_BLUETOOTH_SCO
     7,  // STREAM_SYSTEM_ENFORCED
     15, // STREAM_DTMF
     15  // STREAM_TTS
 };
private static int[] DEFAULT_STREAM_VOLUME = new int[] {
     4,  // STREAM_VOICE_CALL
     7,  // STREAM_SYSTEM
     5,  // STREAM_RING
     11, // STREAM_MUSIC
     6,  // STREAM_ALARM
     5,  // STREAM_NOTIFICATION
     7,  // STREAM_BLUETOOTH_SCO
     7,  // STREAM_SYSTEM_ENFORCED
     11, // STREAM_DTMF
     11  // STREAM_TTS
 };

如果我们需要修改默认的通知声音,则可以将 STREAM_NOTIFICATION 前面的数值 5 给为 0即可,这样默认声音就为0 了。

2.修改数据库中的通知声音值
媒体声音这些数据在数据库中都会默认的存放数据,我们知道大多数的数据都是系统初次启动的时候在 SettingProvider 应用中加载初始化的值,当然通知的声音也在里面。

具体的代码在 frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java 其中有个方法 loadVolumeLevels(db) 此方法则是加载所有默认声音大小的地方,具体代码如下:

stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)" + " VALUES(?,?);");

loadSetting(stmt, Settings.System.VOLUME_MUSIC, 
AudioService.getDefaultStreamVolume(AudioManager.STREAM_MUSIC));

loadSetting(stmt, Settings.System.VOLUME_RING,          AudioService.getDefaultStreamVolume(AudioManager.STREAM_RING));

loadSetting(stmt, Settings.System.VOLUME_SYSTEM,        AudioService.getDefaultStreamVolume(AudioManager.STREAM_SYSTEM));

loadSetting(stmt,Settings.System.VOLUME_VOICE,
AudioService.getDefaultStreamVolume(AudioManager.STREAM_VOICE_CALL));

loadSetting(stmt, Settings.System.VOLUME_ALARM,         AudioService.getDefaultStreamVolume(AudioManager.STREAM_ALARM));

loadSetting(stmt,Settings.System.VOLUME_NOTIFICATION,
AudioService.getDefaultStreamVolume(AudioManager.STREAM_NOTIFICATION));

loadSetting(stmt,Settings.System.VOLUME_BLUETOOTH_SCO,
AudioService.getDefaultStreamVolume(AudioManager.STREAM_BLUETOOTH_SCO));

我们发现loadSetting中把所有声音相关默认值大小的都写入数据库中了,那么我们就可以从这里下手了,在 Settings.System.VOLUME_NOTIFICATION 的设置项中我们就把他设置为0,则系统通知默认的声音就为0 ,我们再看看 AudioService.getDefaultStreamVolume 这个方法的实现.

public static int getDefaultStreamVolume(int streamType) {
    return DEFAULT_STREAM_VOLUME[streamType];
}

实际就是返回了我们在方案一中系统里面默认音量大小数组里面的值。所以方案一和方案二实际是一个效果

3.修改ro.config.notification_sound的属性值
此属性值的意思就是通知默认的音乐文件文件名,我们在系统代码 build/target/product/full_base.mk 中定义了,如果我们不想有声音那么我们可以将默认值改为不存在的文件,则不会播放通知声音了,当然我们也可以在客户定义的mk中使用 PRODUCT_PROPERTY_OVERRIDES 去复写此属性,将其指定为不存在文件或者为空,这样就不会有通知声音响了。

4.修改默认的声音
系统默认了很多的声音,那么我们要修改一些系统里默认的音效文件呢,那么我们可以修改 frameworks/base/data/sounds 下面文件及文件夹中的声音文件,如果改了名字记得要在mk中将原来的替换为新的名字。这下面的mk的作用是将这些音乐文件全部打包到系统 system/media/audio 下面各个模块的文件,然后在系统开机的时候,扫描这些文件,将其加入到数据库中,之后在设置中更换声音时,则直接从数据库中查询这些音乐文件,然后供用户选择。

17. 默认系统亮度修改

修改位置:
frameworks\base\packages\SettingsProvider\res\values\defaults.xml

<integer name="def_screen_brightness">230</integer>

ps:默认值是102,全亮是255,即默认是40%的亮度。而255*0.9=229.5,对229.5取整就是230,即调整系统亮度为90%

18. 默认字体修改

主要有以下几个步骤:
1.在系统目录frameworks/base/data/fonts/ 下预制新增的FZYouHGB18030.ttf字体

2.在系统目录frameworks/base/data/fonts/Android.mk中,将资源文件添加进编译选项

font_src_files := \
    Roboto-Regular.ttf \
    Roboto-Bold.ttf \
    Roboto-Italic.ttf \
    Roboto-BoldItalic.ttf \
    DroidSerif-Regular.ttf \
    DroidSerif-Bold.ttf \
    DroidSerif-Italic.ttf \
    DroidSerif-BoldItalic.ttf \
    DroidSansMono.ttf \
    Clockopia.ttf \
    AndroidClock.ttf \
    AndroidClock_Highlight.ttf \
    AndroidClock_Solid.ttf \
    FZLTHPro_GB18030.ttf

3.在系统目录frameworks/base/data/fonts/fallback_fonts.xml中添加新加入的配置选项

<familyset>
    <family>
        <fileset>
            <file>FZYouHGB18030.ttf</file>
        </fileset>
    </family>
......
</familyset>

4.最后在系统目录external/skia/src/ports/SkFontConfigInterface_android.cpp中指定默认字体文件即可完成默认字体修改

static void get_path_for_sys_fonts(SkString* full, const char name[]) {
    char args[PROPERTY_VALUE_MAX];
    property_get("persist.sys.usedmyfont", args, "default");
    if (gTestFontFilePrefix) {
        full->set(gTestFontFilePrefix);
    } else {
        full->set(getenv("ANDROID_ROOT"));
        full->append(SK_FONT_FILE_PREFIX);
    }
    if (strstr(args, "cafont1")) {
        full->append("FZLTHPro_GB18030.ttf");
    //todo more fonts
    //}else if (strstr(args, "cafont2")) {

    //}else if (strstr(args, "cafont3")) {

    }else {
        //default font
        full->append("FZLTHPro_GB18030.ttf");
    }
}

19. 默认声音修改

1. 资源文件编译
frameworks/base/data/sounds/AllAudio.mk文件中列出了所有要编译的声音文件,这个文件是用generate-all-audio.sh工具来生成的。并且在./build/target/product/full_base.mk中,通过下面这段脚本代码将AllAudio.mk文件加入编译选项中:

$(call inherit-product-if-exists, frameworks/base/data/sounds/AllAudio.mk)

AllAudio.mk主要工作就是在编译系统时候将不同类型的音频文件拷贝到对应的out目录下。如果想要添加新的音频文件,可以在AllAudio.mk直接添加新内容即可。

2. 修改默认设置
我们在系统代码build/target/product/full_base.mk 中定义了,如果我们不想有声音那么我们可以将默认值改为不存在的文件,则不会播放通知声音了,当然我们也可以在客户定义的mk中使用PRODUCT_PROPERTY_OVERRIDES 去复写此属性,将其指定为上面编译到系统中的其他文件名,就能达到切换声音的效果。

PRODUCT_PROPERTY_OVERRIDES := \
    ro.com.android.dateformat=MM-dd-yyyy \
    ro.config.ringtone=Ring_Synth_04.ogg \
    ro.config.notification_sound=pixiedust.ogg