在android源码中声明定义全局变量,此全局变量一旦在某处被赋值在开关机后不会被改变,除非重新赋值或者恢复出厂(会恢复到原来的值):
1.frameworks/base/packages/SettingsProvider/res/values/defaults.xml:
<string name="default_apn_select" translatable="false">default</string>
2.frameworks/base/core/java/android/provider/Settings.java:2753
public static final String DEFAULT_APNSETTING_SELECT_WAP = "default_apnsetting_select_wap";//需要加hide,否则会整编失败
3.frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java:2381
loadStringSetting(stmt, Settings.System.DEFAULT_APNSETTING_SELECT_WAP, R.string.default_apn_select);
---------------------
修改apn默认选项为wap:
ApnSettings.java(packages/apps/Settings)--显示apns列表,包含单选框,fillList中读取数据并且显示,在这里做判断,第一次进入时使用wap作为默认选项,双卡时需要使用sub_id来判断:
if((DEFAULT_GLOBAL_APN.equals(defaultApnValue) || !defaultApnValue.contains(sub_id)) && apn.contains("wap")){
Settings.System.putString(getContentResolver(), Settings.System.DEFAULT_APNSETTING_SELECT_WAP,
defaultApnValue+sub_id);
setSelectedApnKey(key);
UiccCard.java(framework/opt/telephony)--mHandler中EVENT_CARD_REMOVED处理SIM卡被拔除等一系列事件
ShutDownThread.java(frameworks/base/services):beginShutdownSequence()方法主导关机/重启
注意,android中还可以使用SystemProperties.set()/SystemProperties.get()方式或者ContentProvider来存储数据,这两者在开关机后数据都不会被删除或者恢复,而是保持在程序中你给的值。