首次由preferred_network_mode转换成preferred_network_mode1和preferred_network_mode2是在SubscriptionInfoUpdater类中的handleSimLoaded方法

我们机器设备默认的是: [ro.telephony.default_network]: [22,20]
但是双sim卡,会对网络进行设置,会有一个设置的过程: 类->方法流程 click选择某张运营商卡为主卡: IExtTelephony extTelephony = IExtTelephony.Stub.asInterface(ServiceManager.getService("extphone")); extTelephony.setPrimaryCardOnSlot(targetSub);
调用ExtTelephony的setPrimaryCardOnSlot方法 -》ExtTelephonyServiceImpl -》setPrimaryCardOnSlot() -》QtiPrimaryCardController.getInstance().setPrimaryCardOnSlot(slotId); -》QtiPrimaryCardController -》setPrimaryCardOnSlot() -》synchronized private void setPrimaryCardOnSlot(int primarySlotId, Message msg) -》在setPrimaryCardOnSlot方法中:
mPrefNwModes = mPriorityHandler.getNwModesFromConfig(primarySlotId); //通过getNwModesFromConfig获取两种网络模式
for (int i = 0; i < QtiPrimaryCardUtils.PHONE_COUNT; i++) { saveNwModesToDB(mPrefNwModes[i], i); //保存到数据库重要的一步 }
-》QtiPrimaryCardPriorityHandler -》getNwModesFromConfig() -》
for (int i = 0; i < QtiPrimaryCardUtils.PHONE_COUNT; i++) { if (mCurrPriorityConfigs[i] != null) { prefNwModes[i] = (i == primarySlotId) ? mCurrPriorityConfigs[i].network1 : mCurrPriorityConfigs[i].network2; //获取该类中的mCurrPriorityConfigs的network1和network2 } else { prefNwModes[i] = defaultNwMode; } }
-》而mCurrPriorityConfigs的计算和获取是通过: -》loadCurrentPriorityConfigs() -》
public void loadCurrentPriorityConfigs(boolean override) { if(!mLoadingConfigCompleted) { logd("getPrefPrimarySlot: All Config Loading not done. EXIT!!!"); return; }
if(override || !mLoadingCurrentConfigsDone) { //get Current Priority config applicable for each slot for (int i = 0; i < QtiPrimaryCardUtils.PHONE_COUNT; i++) { mCurrPriorityConfigs[i] = getPriorityConfig(i); } mLoadingCurrentConfigsDone = true; } }
-》getPriorityConfig() -》PriorityConfig pConfig = mAllPriorityConfigs.get(i); -》 private HashMap mAllPriorityConfigs = new HashMap(); 从mAllPriorityConfigs 这个HashMap中来 -》在初始化的时候: QtiPrimaryCardPriorityHandler(Context context){ mContext = context;
mCurrPriorityConfigs = new PriorityConfig[QtiPrimaryCardUtils.PHONE_COUNT]; tm = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
readPriorityConfigFromXml(); } -》readPriorityConfigFromXml() -》 private void readPriorityConfigFromXml() { XmlResourceParser parser = null; try { Resources res = mContext.getPackageManager().getResourcesForApplication(packageName); if (res == null) loge("res is null"); int resId = res.getIdentifier(QtiPrimaryCardUtils.getConfigXml(), "xml", packageName); parser = res.getXml(resId); //Clear all old configs from hash map. mAllPriorityConfigs.clear(); mPriorityCount = 0;
XmlUtils.beginDocument(parser, "priority_config"); //2TODO: here we can read the operator config and feed it to pcutils XmlUtils.nextElement(parser); while (parser.getEventType() != XmlPullParser.END_DOCUMENT) { savePriorityConfig(parser); XmlUtils.nextElement(parser); } mLoadingConfigCompleted = true; } catch (Exception e) { Rlog.e(LOG_TAG, "Exception while reading priority configs: " + e.getMessage(), e); mLoadingConfigCompleted = false; } finally { logi("mAllPriorityConfigs: " + mAllPriorityConfigs); if (parser != null) { parser.close(); } } } -》是从QtiPrimaryCardUtils.getConfigXml()中读取xml文件
-》xml的文件名分别是: public static String getConfigXml() { if (isBitSetInConfig(ConfigBits.PRIORITY_CONFIG_3)) { return "priority_config_3"; } else if (isBitSetInConfig(ConfigBits.PRIORITY_CONFIG_2)) { return "priority_config_2"; } else if (isBitSetInConfig(ConfigBits.PRIORITY_CONFIG_1)) { return "priority_config_1"; } return "priority_config_2"; }
-》打开xml文件:
config_3:

config_2:

config_1:

更多相关文章

  1. [forward]Android完全退出应用程序
  2. 如何下载并编译Android内核源码goldfish(图文)
  3. Cocos2d-x微信登陆Demo
  4. java中采用Pull解析器对XML文件进行解析
  5. Android(安卓)background背景图片平铺
  6. Android(安卓)-- 使用OKhttp获取response时遇到的坑
  7. Android系统文件目录结构
  8. Android开发学习之View测量的内置常用方法
  9. android addr2line使用

随机推荐

  1. CentOS7下MySQL5.7安装配置方法图文教程(Y
  2. mysql 5.7.17 winx64免安装版配置方法图
  3. Mysql 5.7.17安装后登录mysql的教程
  4. Mysql高效分页详解
  5. MySQL Daemon failed to start错误解决办
  6. mysql 5.7.13 winx64安装配置方法图文教
  7. mysql 5.7.10 winx64安装配置方法图文教
  8. mysql 5.7.17 安装配置方法图文教程(windo
  9. MySQL按照汉字的拼音排序简单实例
  10. mysql 5.7.17 安装配置方法图文教程(ubunt