Settings中大部分的默认值可以通过SettingsProvider的res/values/defaults中的默认值的修改实现,比如wifi默认开启关闭,GPS默认开启关闭。
但是defaults.xml中没有默认开关数据流量的选项
一般defaults中没有的可以通过DatabaseHelper来进行修改
frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
loadGlobalSettings(SQLiteDatabase db)方法中
// Mobile Data default, based on build
loadSetting(stmt, Settings.Global.MOBILE_DATA,
"true".equalsIgnoreCase( SystemProperties.get("ro.com.android.mobiledata",
"true")) ? 1 : 0);
frameworks/base/telephony/java/android/telephony/TelephonyManager.java中也对该开关进行了一个引用
/**
* This function retrieves value for setting "name+subId", and if that is not found
* retrieves value for setting "name", and if that is not found throws
* SettingNotFoundException
*
* @hide */
public static int getIntWithSubId(ContentResolver cr, String name, int subId)
throws SettingNotFoundException {
try {
return Settings.Global.getInt(cr, name + subId);
} catch (SettingNotFoundException e) {
try {
int val = Settings.Global.getInt(cr, name);
Settings.Global.putInt(cr, name + subId, val);
/* We are now moving from 'setting' to 'setting+subId', and using the value stored
* for 'setting' as default. Reset the default (since it may have a user set
* value). */
int default_val = val;
if (name.equals(Settings.Global.MOBILE_DATA)) {
default_val = "true".equalsIgnoreCase(
SystemProperties.get("ro.com.android.mobiledata", "true")) ? 1 : 0;
} else if (name.equals(Settings.Global.DATA_ROAMING)) {
default_val = "true".equalsIgnoreCase(
SystemProperties.get("ro.com.android.dataroaming", "false")) ? 1 : 0;
}
if (default_val != val) {
Settings.Global.putInt(cr, name, default_val);
}
return val;
} catch (SettingNotFoundException exc) {
throw new SettingNotFoundException(name);
}
}
}
这里的值根据mk文件中的一个宏开关来控制,当注释掉开关时,默认为true,因此当我们将第三个参数改为false就可以默认关闭数据流量了