IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 双卡双待手机DDS切换功能介绍 -> 正文阅读

[移动开发]双卡双待手机DDS切换功能介绍

双卡双待手机有DSDS(Dual?Sim Dual Standby)和DSDA(Dual SIM dual active)方案,早期产品使用DSDA?方案比较多,随着多模、多频段、CA、MIMO等技术出现,硬件射频复杂度大大增加,再加上双卡双通的实际使用场景并不多,DSDS就成为了目前市场的主流方案。

DSDS只有一张卡能够占有PS业务栈或Radio resource,故引入了DDS(Default Data?SIM)概念。双SIM卡手机,只有一张卡能进行数据业务,称为主卡,另一张卡则称为副卡。若进行主副卡切换,则副卡切为DDS主卡;

DDS切换流程

手动DDS切换

通过setting-双卡与移动网络,选择默认上网卡。

DDS状态会保存在telephony的DB中,对应为Settings.Global.MULTI_SIM_DATA_CALL_SUBSCRIPTION。

可通过adb shell getprop settings list multi_sim_data_call进行查看。

frameworks/opt/telephony/src/java/com/android/internal/telephony/SubscriptionController.java?????

public void setDefaultDataSubId(int subId) {

enforceModifyPhoneState("setDefaultDataSubId"); ?????????????????????? ? ? ? ? ? ? ? ?? String flexMapSupportType =

SystemProperties.get("persist.radio.flexmap_type", "nw_mode");

if (subId == SubscriptionManager.DEFAULT_SUBSCRIPTION_ID) {

throw new RuntimeException("setDefaultDataSubId called with DEFAULT_SUB_ID");

}

updateAllDataConnectionTrackers();

Settings.Global.putInt(mContext.getContentResolver(),

Settings.Global.MULTI_SIM_DATA_CALL_SUBSCRIPTION, subId);

broadcastDefaultDataSubIdChanged(subId);

} ?

DDS切换Log参考

部分log如下,主要是PS domain/pdp建立。

//Setting UI set DDS

MobileNetworkSettings: Default Data SubId [1]

//telephony-fwk subscription module detect DDS switch

SubscriptionMonitor:?Default changed 1->2

SubscriptionMonitor: newDefaultDataPhoneId=1

SubscriptionMonitor: Default phoneId changed 0->1, 1,1 registrants

TelephonyNetworkFactory[0]: onDefaultChange(true,false)

TelephonyNetworkFactory[1]: onDefaultChange(false,true)

//set PS domain switch cmd to RIL

PhoneSwitcher: InformDdsToRil rild= 1, DDS=1?RILJ ???: [4184]> RIL_REQUEST_ALLOW_DATA allowed: false [SUB0]

RILJ ???: [4185]> RIL_REQUEST_ALLOW_DATA allowed: true [SUB1]

RILJ ???: [4184]< RIL_REQUEST_ALLOW_DATA ?[SUB0]

RILJ ???: [4185]< RIL_REQUEST_ALLOW_DATA ?[SUB1]

//PS domain camp on

QtiGsmDCT: [1]onDataConnectionAttached

//try setup pdp

TelephonyNetworkFactory[1]: onActivePhoneSwitch(true, true)

TelephonyNetworkFactory[1]: onReleaseNetworkFor NetworkRequest [ id=8, legacyType=-1, [ Transports: CELLULAR Capabilities: IMS&TRUSTED&NOT_VPN] ]

TelephonyNetworkFactory[0]: not releasing - isApp=false, isAct=false NetworkRequest [ id=8, legacyType=-1, [ Transports: CELLULAR Capabilities: IMS&TRUSTED&NOT_VPN] ]

RILJ ???: [4260]> SETUP_DATA_CALL 14 0 cmnet ??0 IPV4V6 [SUB1]

RILJ ???: [4260]< SETUP_DATA_CALL DataCallResponse: {version=11 status=0 retry=-1 cid=0 active=2 type=IPV4V6 ifname=rmnet_data0 mtu=1500 addresses=[10.148.243.195/29] dnses=[211.136.112.50,211.136.150.66] gateways=[10.148.243.196] pcscf=[]} [SUB1]

TelephonyNetworkFactory[1]: got request NetworkRequest [ id=10, legacyType=-1, [ Transports: CELLULAR Capabilities: IMS&TRUSTED&NOT_VPN] ] with score 0

TelephonyNetworkFactory[0]: got request NetworkRequest [ id=10, legacyType=-1, [ Transports: CELLULAR Capabilities: IMS&TRUSTED&NOT_VPN] ] with score 0

TelephonyNetworkFactory[1]: onNeedNetworkFor NetworkRequest [ id=10, legacyType=-1, [ Transports: CELLULAR Capabilities: IMS&TRUSTED&NOT_VPN] ]

TelephonyNetworkFactory[0]: not acting - isApp=false, isAct=false NetworkRequest [ id=10, legacyType=-1, [ Transports: CELLULAR Capabilities: IMS&TRUSTED&NOT_VPN] ]

RILJ ???: [4279]> SETUP_DATA_CALL 14 2 ims ??0 IPV4V6 [SUB1]

RILJ ???: [4279]< SETUP_DATA_CALL DataCallResponse: {version=11 status=0 retry=-1 cid=1 active=2 type=IPV4V6 ifname=rmnet_data7 mtu=1500 addresses=[2409:8804:8010:17cc:db16:6730:30b2:383c/64] dnses=[] gateways=[fe80:0000:0000:0000:e1cc:541a:ab8c:f1bf] pcscf=[]} [SUB1]

动态DDS切换

除了用户手动设置DDS外,特定的场景还可以进行DDS动态切换。

当subInfo/network request/radio state/数据开关/通话状态等改变时,都会触发onEvaluate方法,判断当前应该将DDS切换到哪张卡上。

当然,动态DDS切换的场景还有很多,例如信号强度、网络注册状态、吞吐量等等,手机厂家可以使用更优的算法进行更智能化切换,让数据建立在性能更优的SIM卡上,满足用户的流畅体验。?

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 19:17:25  更:2022-08-19 19:20:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 4:25:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码