首次由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<Integer, PriorityConfig> mAllPriorityConfigs =
new HashMap<Integer, PriorityConfig>();
从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:
<priority_config>
<!--[ODM][pref_network] enable config primary sub setable,modify the default config START-->
<!--
<priority priority="0" iin_pattern="^8986(?=03|11)" card_type="CARDTYPE_2G" network1="7" network2="7" />
<priority priority="1" iin_pattern="^8986(?=03|11)" card_type="CARDTYPE_3G" network1="7" network2="7"/>
<priority priority="2" iin_pattern="^8986(?=01|09)" card_type="CARDTYPE_2G" network1="1" network2="1" />
<priority priority="3" iin_pattern="^8986(?=01|09)" card_type="CARDTYPE_3G" network1="1" network2="1"/>
<priority priority="4" iin_pattern="^(?!8986)" card_type="CARDTYPE_2G" network1="18" network2="1" />
<priority priority="5" iin_pattern="^(?!8986)" card_type="CARDTYPE_3G" network1="20" network2="1"/>
<priority priority="6" iin_pattern="^8986(?!01|03|09|11)" card_type="CARDTYPE_2G" network1="18" network2="1"/>
<priority priority="7" iin_pattern="^8986(?!01|03|09|11)" card_type="CARDTYPE_3G" network1="20" network2="1"/>
-->
<priority priority="4" iin_pattern="^(?!8986)" card_type="CARDTYPE_4G" network1="22" network2="22"/>
<priority priority="5" iin_pattern="^898600" card_type="CARDTYPE_4G" network1="20" network2="17"/>
<priority priority="6" iin_pattern="^898602" card_type="CARDTYPE_4G" network1="20" network2="17"/>
<priority priority="7" iin_pattern="^898607" card_type="CARDTYPE_4G" network1="20" network2="17"/>
<!--CU-->
<priority priority="8" iin_pattern="^898601" card_type="CARDTYPE_4G" network1="20" network2="9"/>
<priority priority="9" iin_pattern="^898609" card_type="CARDTYPE_4G" network1="20" network2="9"/>
<!--CT-->
<priority priority="0" iin_pattern="^898603" card_type="CARDTYPE_4G" network1="22" network2="8"/>
<priority priority="1" iin_pattern="^898606" card_type="CARDTYPE_4G" network1="22" network2="8"/>
<priority priority="2" iin_pattern="^898611" card_type="CARDTYPE_4G" network1="22" network2="8"/>
<priority priority="3" iin_pattern="^898530" card_type="CARDTYPE_4G" network1="22" network2="8"/>
<!--end-->
<!--[ODM][pref_network] enable config primary sub setable,modify the default config END-->
</priority_config>
config_2:
<priority_config>
<priority priority="0" iin_pattern="^[0-9]{6,}" card_type="CARDTYPE_2G" network1="3" network2="1" />
<priority priority="1" iin_pattern="^[0-9]{6,}" card_type="CARDTYPE_3G" network1="9" network2="1"/>
<priority priority="2" iin_pattern="^[0-9]{6,}" card_type="CARDTYPE_4G" network1="9" network2="1"/>
</priority_config>
config_1:
<priority_config>
<priority priority="0" iin_pattern="^(?!8986)" card_type="CARDTYPE_2G" network1="18" network2="1" />
<priority priority="1" iin_pattern="^(?!8986)" card_type="CARDTYPE_3G" network1="20" network2="1"/>
<priority priority="2" iin_pattern="^8986(?!01|03|09|11)" card_type="CARDTYPE_2G" network1="18" network2="1"/>
<priority priority="3" iin_pattern="^8986(?!01|03|09|11)" card_type="CARDTYPE_3G" network1="20" network2="1"/>
</priority_config>

Android 7.1 双卡双待机器,首选网络类型设置 详细分析相关推荐

  1. Android系统首选网络类型设置

    Android 首选网络类型式默认值的修改方法 源码部分 //设置 frameworks/base/packages/SettingsProvider/src/com/android/provider ...

  2. Android 8.1 设置中首选网络类型缺少LTE

    平台 RK3399 + Android 8.1 问题: 设置 > 更多 > 移动网络 > 首选网络类型 选项中, 仅显示 3G和2G, 缺少LTE, 本身模块与SIM卡是支持LTE的 ...

  3. 设置里首选网络类型由3G改成4G

    Android首选网络类型默认修改 1.源码路径:androidm/frameworks/base/packages/SettingsProvider/src/com/android/provider ...

  4. [Android7.1][RK3399] 将设置首选网络类型由3G设置为LTE

    Platform: RK3399 OS: Android 7.1 Kernel: v4.4.126 需求 将设置首选网络类型由3G设置为LTE 设置步骤 diff --git a/rk3399_mid ...

  5. 安卓网络类型设置的实现

    工作背景:公司出口国外某国的设备,因为该国对4G认证要求较高,流程非常麻烦,客户不想取得4G方面认证,因此订单机器设备需禁用4G,且不能手动恢复4G,默认3G/2G(auto)模式. 实现思路:在安卓 ...

  6. Android版xx助手之天天酷跑外挂详细分析

    Android版xx助手之天天酷跑外挂详细分析 图/文      莫灰灰 背景 近些年来,移动互联网的大肆崛起,潜移默化中影响着人们的生活和工作习惯.当腾讯的微信平台接入手机游戏之后,移动端的游戏也开 ...

  7. Android CTA认证设定首选网络类型

    需求 硬件只支持4G,过CTA认证时打网络电话,会出现3G网络的选择,会导致过不了,需要禁用3G网络选择功能. Android 8.1.0 分析 可adb命令查看当前的网络类型 getprop | g ...

  8. VMware中将虚拟机的网络类型设置为桥接模式

    本人的虚拟机是在VMware虚拟机软件下安装的Centos7版本. 1.克隆一台虚拟机(名称:cloneVM1) 2.查看物理主机(宿主机)的网络信息 (虚拟机的ip地址需要和物理主机在同一个网络,虚 ...

  9. 数据链路层网络类型和协议分析(P2P)

    数据链路层的网络类型: 根据数据链路层所使用的协议及规则来进行划分:1.P2P网络 --- 点到点网络2.MA网络 --- 多点接入网络①BMA -- 广播式多点接入网络②NBMA -- 非广播式多点 ...

最新文章

  1. 阿里云服务器CentOS6.9 nexus私服使用
  2. T-SQL 根据年月日创建DateTime
  3. datatable移动一列的位置
  4. 各种环境下的渗透测试
  5. 【c】写头文件要加#ifndef,#define, #endif
  6. 1018 锤子剪刀布 (20分)
  7. Python答题:LinteCode简单题库(一)
  8. 你知道生气有多可怕吗?“气死人”是有科学依据的
  9. Qt5.12安装错误提示:C:\Qt5.12.11\vcredist\vcredist_msvc2019_x86.exe /norestart /q
  10. linux 获取so基址,ld.so分析5 _dl_start
  11. mongoDB's Optimization example
  12. StringUtils简单判断字符串是否为null或者空字符串
  13. Python常用的设计模式
  14. 计算机软件图标不正常,电脑桌面软件图标显示异常
  15. Multisim 编码器 译码器 74LS138 74LS148
  16. 链接mysql 504_phpMyAdmin错误代码:504 MySQL查询
  17. MIPS Linux内核编译构建环境的搭建
  18. 怎么把电脑上的文件备份到百度网盘?
  19. UPS BP650CH实现nas自动关机
  20. 安装kalibr踩坑5:E: Package ‘python-software-properties‘ has no installation candidate

热门文章

  1. [记录]小破站一键三连动画基于STM32 cubemx hal库函数OLED显示屏
  2. 高中生的高效学习法之“纵横术”
  3. kafka 3.0 日志定时清理(源码)
  4. 获取当周的周六、周日
  5. 非遗造物 匠心守护 昆明南亚风情第壹城非遗文化节等你来玩
  6. JAVA编写的简单计算器程序
  7. 盲人程序员如何编程?全靠每分钟450个单词
  8. 通用triggerEvent方法
  9. vscode自定义大小写转换快捷键
  10. 怎么证明前端和后端的不同