前面文章分别介绍过彩信(MMS)流程和双卡DDS切换功能,本篇重点介绍非DDS卡进行彩信业务流程,方便大家理解。

(11条消息) 彩信功能介绍_Jack(Li)的博客-CSDN博客

在彩信功能介绍文章中,我们知道MMS业务priority默认config高于default data,非DDS卡下载由MT SMS触发。在进行MMS业务时,app发送NetworkRequest中携带目标SUBID信息,在TNF中匹配上对应的SIM卡。

(11条消息) 双卡双待手机DDS切换功能介绍_Jack(Li)的博客-CSDN博客

文章中介绍了DDS自动和手动切换方式。

MMS会触发DDS自动切换,区别于DDS的手动切换,并没有将LTE capability切到临时高优先级业务的SIM卡,通过InformDdsToRil与ALLOW_DATA之间的组合来区分场景,只有当Allow_data与informDdsToRil一致时,才将4G的capability全部switch到同一张SIM。

参考代码

qcril_qmi_nas.c void qcril_qmi_nas_request_allow_data

(

const qcril_request_params_type *const params_ptr,

qcril_request_return_type *const ret_ptr

)

{

else if( ( qmi_ril_is_multi_sim_feature_supported() &&

(!strncmp(prop_val, "dsds", QMI_RIL_SYS_PROP_LENGTH_MULTI_SIM )) &&

(nas_common_info.dsds.is_default_data_set == TRUE ) &&

(nas_common_info.dsds.default_data_instance_id != qmi_ril_get_process_instance_id())     &&(!NAS_CACHE_IS_ENTRY_VALID(nas_dms_cached_info.max_active_data_subs) ||

(1 == nas_dms_cached_info.max_active_data_subs))

) || ( qmi_ril_is_multi_sim_feature_supported() &&

(!NAS_CACHE_IS_ENTRY_VALID(nas_dms_cached_info.max_active_data_subs) ||

(1 == nas_dms_cached_info.max_active_data_subs)) )

)

{

if (!NAS_CACHE_IS_ENTRY_VALID(nas_cached_info.is_default_data_subs) ||

(0 == nas_cached_info.is_default_data_subs) ||

(NAS_CACHE_IS_ENTRY_VALID(nas_cached_info.dds_type) && (NAS_DDS_TYPE_PERMANENT_V01 == nas_cached_info.dds_type)))

{

res = qcril_qmi_nas_send_data_subscription_request(NAS_DDS_DURATION_TEMPORARY_V01);

QCRIL_LOG_ESSENTIAL("DDS change triggered because of MMS in DSDS.. res %d", res);

}

参考Log

SUB0为DDS卡,SUB1为副卡,彩信通过SUB1发送。

//MMS app request MMS networkRequest to CS

MmsService: sendMessageMmsService: [SendRequest@1be6253] MmsNetworkManager: start new network request

ConnectivityService: requestNetwork for Request from uid/pid:1001/8297 for NetworkRequest [ id=26, legacyType=-1, [ Transports: CELLULAR Capabilities: MMS&NOT_RESTRICTED&TRUSTED&NOT_VPN Specifier: <2>] ]//phoneSwitch handle

PhoneSwitcherNetworkRequstListener: got request NetworkRequest [id=26,legacyType=-1,[Transports:CELLULAR Capabilities:MMS&NOT_RESTRICTED&TRUSTED&NOT_VPN Specifier: <2>]] with score 0

TelephonyNetworkFactory[1]: got request NetworkRequest [ id=26, legacyType=-1, [ Transports: CELLULAR Capabilities: MMS&NOT_RESTRICTED&TRUSTED&NOT_VPN Specifier: <2>] ] with score 0

PhoneSwitcher: InformDdsToRil rild= 0, DDS=0

PhoneSwitcher: InformDdsToRil rild= 1, DDS=0

//PS ability switchfrom SUB0 -> SUB1

RILJ : [6806]> RIL_REQUEST_ALLOW_DATA allowed: false [SUB0]

RILJ : [6807]> RIL_REQUEST_ALLOW_DATA allowed: true [SUB1]

RILJ : [6806]< RIL_REQUEST_ALLOW_DATA  [SUB0]

RILJ : [6807]< RIL_REQUEST_ALLOW_DATA  [SUB1]

//setup pdp on SUB1

RILJ:[6857]> SETUP_DATA_CALL 2 0 cmwap   0 IPV4V6 [SUB1]

RILJ:[6857]< SETUP_DATA_CALL DataCallResponse: {version=11 status=0 retry=-1 cid=0 active=2 type=IPV4V6 ifname=rmnet_data0 mtu=1500 addresses=[10.138.193.14/30] dnses=[211.136.112.50,211.136.150.66] gateways=[10.138.193.13] pcscf=[]} [SUB1]

//MMS

MmsService: [SendRequest@1be6253] MmsNetworkManager: start new network request

MmsService: NetworkCallbackListener.onAvailable: network=129

MmsService: [SendRequest@1be6253] APN name is cmwap

MmsService: [SendRequest@1be6253] Loading APN using name cmwap

MmsService: [SendRequest@1be6253] HTTP: POST http://mmsc.monternet.com[25], proxy=10.0.0.172:80, PDU size=6689

MmsService: [SendRequest@1be6253] HTTP: User-Agent=Android-Mms/2.0

MmsService: [SendRequest@1be6253] HTTP: UaProfUrl=http://www.google.com/oha/rdf/ua-profile-kila.xml

MmsService: [SendRequest@1be6253] HTTP: 200 OKMmsService: [SendRequest@1be6253] HTTP: response size=43

MmsService: [SendRequest@1be6253] MmsNetworkManager: release, count=0

MmsService: getAutoPersisting

MmsService: Schedule requests pending on SIM

MmsServiceBroker: getCarrierConfigValues() by com.android.messaging

//recovery original pdp state after MMS finished

TelephonyNetworkFactory[1]: onReleaseNetworkFor NetworkRequest [ id=26, legacyType=-1, [ Transports: CELLULAR Capabilities: MMS&NOT_RESTRICTED&TRUSTED&NOT_VPN Specifier: <2>] ]

RILJ : [6872]> RIL_REQUEST_ALLOW_DATA allowed: false [SUB1]

RILJ : [6873]> RIL_REQUEST_ALLOW_DATA allowed: true [SUB0]

RILJ : [6872]< RIL_REQUEST_ALLOW_DATA  [SUB1]

RILJ : [6873]< RIL_REQUEST_ALLOW_DATA  [SUB0]

RILJ : [6927]> SETUP_DATA_CALL 14 0 cmnet   0 IPV4V6 [SUB0]

RILJ : [6927]< SETUP_DATA_CALL DataCallResponse: {version=11 status=0 retry=-1 cid=0 active=2 type=IPV4V6 ifname=rmnet_data0 mtu=1500 addresses=[10.172.13.248/28] dnses=[211.136.112.50,211.136.150.66] gateways=[10.172.13.249] pcscf=[]} [SUB0]

非DDS卡发送彩信(MMS)业务流程介绍相关推荐

  1. 小米MIUI的发送彩信(MMS)的权限研究

    前言 原创文章,欢迎转载,请保留出处. 有任何错误.疑问或者建议,欢迎指出. 我的邮箱:Maxwell_nc@163.com 随便写一个android程序添加权限后放到miui中运行会发现安装时没提示 ...

  2. Android短信开发 发送彩信 ‘ 高通源码 ‘ (彩信发送过程1)

    Android彩信发送有下面几个类: 一个一个类看  : 1 . ComposeMessageActivity.java   详情页面 2 . WoringMessage.java           ...

  3. android看彩信自动退出,直接发送彩信?为什么很多安卓的应用都有权限,而我却不知道...

    原标题:直接发送彩信?为什么很多安卓的应用都有权限,而我却不知道 在我们在下载一些软件的时候,安装后如果不加注意,可能会漏掉很多重要的安全问题.比如,一些app会取得直接发送彩信的权限,并且我们也不会 ...

  4. mms彩信发送 java_Android编程之非调用系统界面实现发送彩信的方法(MMS)

    本文实例讲述了Android非调用系统界面实现发送彩信的方法.分享给大家供大家参考,具体如下: 一.问题: 最近有个需求,不去调用系统界面发送彩信功能.做过发送短信功能的同学可能第一反应是这样: 不使 ...

  5. android 实现发送彩信方法 (mms),非调用,android 实现发送彩信方法 (MMS),非调用系统界面...

    最近有个需求,不去调用系统界面发送彩信功能.做过发送短信功能的同学可能第一反应是这样: 不使用 StartActivity,像发短信那样,调用一个类似于发短信的方法 SmsManager smsMan ...

  6. android 实现发送彩信方法 (MMS),非调用系统彩信界面

    最近有个需求,不去调用系统界面发送彩信功能.做过发送短信功能的同学可能第一反应是这样: 不使用 StartActivity,像发短信那样,调用一个类似于发短信的方法 SmsManager smsMan ...

  7. android 实现发送彩信方法 (MMS)

    最近有个需求,不去调用系统界面发送彩信功能.做过发送短信功能的同学可能第一反应是这样: 不使用 StartActivity,像发短信那样,调用一个类似于发短信的方法 SmsManager smsMan ...

  8. android 实现发送彩信,android 实现发送彩信方法 (MMS)

    最近有个突然有个想法,不去调用系统界面发送彩信功能.做过发送短信功能的同学可能第一反应是这样: 不使用 StartActivity,像发短信那样,调用一个类似于发短信的方法 SmsManager sm ...

  9. 几种常见非接卡的简单介绍

    转载自:https://www.cnblogs.com/sdsunjing/p/5019831.html 几种常见非接卡的简单介绍: 1.M1卡 M1卡是非接触式感应卡,数据保存期为10年,可改写10 ...

最新文章

  1. vs2017开发Node.js控制台程序
  2. 【译】码农生涯十六条不要
  3. 链家前DBA判刑7年!你还敢不敢删库?
  4. es6 语法 (Proxy和Reflect 的对比)
  5. 广西农产品(广州)交易会 农业大健康·林裕豪:签约农商对接
  6. 嵌套循环连接,哈希连接,排序合并连接(2015-2-4学习日记)
  7. ​FreeSWITCH视频会议“标准”解决方案
  8. 刚刚有水了一道,用递归实现进制转换
  9. 补习系列(22)-全面解读 Spring Profile 的用法
  10. python圆形按钮_小白用python写个贪吃蛇给小白看
  11. VS2005 使用过程中有用的一些快捷键和小技巧
  12. 【Oracle】Oracle基本数据类型总结
  13. 汽车在哪扇门后面(博弈论的诡计)
  14. 计算器html js php代码,html+js实现简单的计算器代码(加减乘除)
  15. 纸张的规格A3.A4.A5.A6纸的尺寸大小
  16. graphpad怎么修改图片大小_Graphpad作图小技巧:如何统一图片尺寸
  17. 谈谈区块链正经的商用场景!
  18. ArcMap 属性连接和空间连接用法
  19. integrate函数python_python – Sympy:integrate()奇怪的输出
  20. 歌曲:后来的我们 歌手:品冠

热门文章

  1. 飞桨领航团AI达人训练营Notes-Day1让人拍案叫绝的创意都是如何诞生的
  2. 企业微信(一)——企业微信PC端开启调试
  3. Android 直接播放系统提示音
  4. jfif格式怎么转换成jpg?
  5. pptp的 服务器位置,pptp类型服务器地址大全
  6. 2019年最新PHP面试题
  7. 安装checkra1n,准备越狱
  8. 深度学习中的生成对抗网络GAN
  9. 压测难,难于上青天,80%的直播应用都败在了这里
  10. php程序设计笔记整理,PHP工作笔记:yii2各种功能汇总