1 发送/接收彩信的步骤
1.1 发送彩信
- 应用程序触发彩信发送
- 建立MMS PDN
- 由应用程序发送 htttp请求(POST)
- 彩信传输已完成,并通知应用程序
- MMS PDN发布
1.2 接受彩信
- 通过传入的短信通知,接收 MMS
- 应用程序触发接收彩信
- 建立MMS PDN
- 由应用程序发送 htttp请求(POST)
- 彩信传输已完成,并通知应用程序
- MMS PDN发布。
2 MMS 调试步骤
2.1 MMS APN启动
检查是否有MMS APN的网络请求,然后显示MMS APN。举例说明
//MMS 启动网络请求
6476 DMmsService:[SendRequest@8f0ce1f] MmsNetworkManager:start newnetwork request
//请求彩信网络
DConnectivityService:requestNetwork for uid/pid:1001/2307 NetworkRequest [ REQUEST id=39, [ Transports:CELLULARCapabilities:MMS&NOT_RESTRICTED&TRUSTED&NOT_VPN Specifier:<3>] ]
//尝试设置MMS apn
D/QtiGsmDCT( 3911):[1]trySetupDatafor type:mms dueto dataEnabled, mIsPsRestricted=false
//MMS APN信息
D/QtiGsmDCT( 2894):[1]trySetupData:CreatefrommAllApnSettings :[[ApnSettingV3] 中国联通 3G 网络, 1197, 46001, 3gnet, , , , , , -1, default | supl| net,IP, IP, true, 0, 0, 0, false, 0, 0, 0, 0, , , false][[ApnSettingV3] 中国联通 WAP 网络, 1198, 46001, 3gwap, 10.0.0.172, , , , 80, -1, *, IP, IP, true, 0, 0, 0, false, 0,0, 0, 0, , , false][[ApnSettingV3] 中国联通 3G 彩信, 1199, 46001, 3gwap, , http://mmsc.myuni.com.cn, 10.0.0.172, 80, , -1, mms, IP, IP, true, 0, 0, 0, false, 0,0, 0, 0, , , false]
//设置数据呼叫请求
Line 9611: 01-11 19:52:37.069 D/RILJ ( 3911):[4590]>SETUP_DATA_CALL,radioTechnology=0,isRoaming=false,allowRoaming=true,DataProfile=0/3gwap/IP/0///0/0/0/0/true/3/IP/0/0///false[SUB1]
//设置数据呼叫成功响应
Line 10133: 01-11 19:52:46.983 D/RILJ ( 3911):[4590]< SETUP_DATA_CALLDataCallResponse: { status=0 retry=-1 cid=0 active=2 type=IP ifname=rmnet_data3 mtu=1500 addresses=[10.97.84.104/28] dnses=[112.65.184.255,211.95.1.97] gateways=[10.97.84.105] pcscf=[]} [SUB1]
注意:如果默认APN也包括MMS,即APN类型为默认MMS,并且默认APN已连接,则不会建立MMS数据呼叫再一次
2.2 使用MMS服务器进行数据传输
一旦MMS APN成功启动,数据流量需要与MMS服务器进行检查。可以在AP侧TCP dump或QXDM日志中检查该名称。
源地址:在MMS APN的设置数据呼叫响应中从网络接收(即10.97.84.04–请参阅第2.1节中的日志片段)
目标地址:MMSC IP地址,端口-在MMS APN信息中定义(即10.0.0.172,80)
//MMS APN信息
D/QtiGsmDCT( 2894):[1]trySetupData:CreatefrommAllApnSettings :[[ApnSettingV3] 中国联通 3G 网络, 1197, 46001, 3gnet, , , , , , -1, default | supl| net,IP, IP, true, 0, 0, 0, false, 0, 0, 0, 0, , , false][[ApnSettingV3] 中国联通 WAP 网络, 1198, 46001, 3gwap, 10.0.0.172, , , , 80, -1, *, IP, IP, true, 0, 0, 0, false, 0,0, 0, 0, , , false][[ApnSettingV3] 中国联通 3G 彩信, 1199, 46001, 3gwap, , http://mmsc.myuni.com.cn, 10.0.0.172, 80, , -1, mms, IP, IP, true, 0, 0, 0, false, 0,0, 0, 0, , , false]
..彩信PDN已设置,彩信应用程序正在尝试发送彩信
//MMS APN相关信息
6476 DMmsService:[SendRequest@8f0ce1f] APN nameisairtelmms.com
6476 I MmsService:[SendRequest@8f0ce1f] LoadingAPN using nameairtelmms.com
6476 I MmsService:[SendRequest@8f0ce1f] UsingAPN [type=mms mmsc=http://100.1.201.171:10021/mmsc mmsproxy=100.1.201.172 mmsport=8799 name=AirtelMMS apn=airtelmms.combearer_bitmask=0 protocol=IP roaming_protocol=IP authtype=-1]
//HTTP请求
6476 DMmsService:[SendRequest@8f0ce1f] HTTP:POST http://100.1.201.171[31], proxy=100.1.201.172:8799, PDUsize=142753
6476 I MmsService:[SendRequest@8f0ce1f] HTTP:IPv4 provisioned
6476 I MmsService:[SendRequest@8f0ce1f] HTTP:User-Agent=Android-Mms/2.0
6476 I MmsService:[SendRequest@8f0ce1f] HTTP:UaProfUrl=http://www.google.com/oha/rdf/ua-profile-kila.xml
..可通过TCP dump分析http请求中的MMS数据。tcp dump中的数据单独分析
//MMS传输完成
6476 DMmsService:[SendRequest@8f0ce1f] HTTP: 200 OK
6476 DMmsService:[SendRequest@8f0ce1f] HTTP:responsesize=67
.. MMS应用程序发布请求
//释放请求
6476 DMmsService:[SendRequest@8f0ce1f] MmsNetworkManager:release,count=0
1641 DConnectivityService:releasingNetworkRequest [ REQUEST id=17, [ Transports:CELLULARCapabilities:MMS&NOT_RESTRICTED&TRUSTED&NOT_VPN Specifier:<19>] ] (CALLBACK_RELEASED)
TCP dump数据分析
//与MMS服务器的TCP对话
"10.97.84.104",37355,"10.0.0.172",80,35,23537,21,22347,14,1190,55.312927000000002,2.0178539999999998,88597.093744146012,4717.8834544025485
检查与MMS服务器的InitialTCP 3向握手。成功后,检查MMS发送请求和MMS发送确认消息。
//带MMS服务器的TCP流
//来自设备的SYN
10.97.84.104 10.0.0.172 TCP 76 37355 → 80 [SYN] Seq=0 Win=42340 Len=0 MSS=1460 SACK_PERM=1 TSval=59284 TSecr=0
WS=256
//来自MMS服务器的SYN、ACK
10.0.0.172 10.97.84.104 TCP 80 80 → 37355 [SYN, ACK] Seq=0 Ack=1 Win=4182 Len=0 MSS=1394 WS=1 TSval=3843072654
TSecr=59284 SACK_PERM=1
//来自设备的ACK
10.97.84.104 10.0.0.172 TCP 68 37355 → 80 [ACK] Seq=1 Ack=1 Win=42496 Len=0 TSval=59375 TSecr=3843072654
//彩信发送请求
10.97.84.104 10.0.0.172 MMSE/SMIL 867 MMS m-send-req (JPEGJFIF image) (text/plain)
//MMS发送配置
10.0.0.172 10.97.84.104 MMSE 270 MMS m-send-conf
注意:有时在TCP dump中找不到MMS发送请求和MMS发送确认消息,因为设备和MMS服务器之间的MMS流量已被加密。在这种情况下,请确保已交换TCP“FIN”以确认传输已完成
//通过TCP传输彩信
10.0.0.172 10.97.84.104 HTTP HTTP/1.1 200 OK [Packetsizelimited during capture]
10.0.0.172 10.97.84.104 TCP 9401 → 40611 [FIN, ACK] Seq=383 Ack=9004 Win=13227 Len=0 TSval=3181671942 TSecr=24286
10.97.84.104 10.0.0.172 TCP 40611 → 9401 [FIN, ACK] Seq=9004 Ack=384 Win=65535 Len=0 TSval=24308 TSecr=3181671942
..通过TCP MMS应用程序进行的MMS传输收到MMS传输完成的指示
2.3 MMS失败:网络相关问题
有时MMS服务器没有回复,或者网络中可能存在其他问题,设备和MMS服务器之间的数据连接没有建立。如果发生Connection Timed路由错误。
11:32:27.485 D/MmsService( 3618):[SendRequest@3fc839a] APN nameis mms
11:32:27.485 I/MmsService( 3618):[SendRequest@3fc839a] LoadingAPN using name mms
11:32:27.494 I/MmsService( 3618):[SendRequest@3fc839a] UsingAPN [type=mms mmsc=http://217.31.233.18:6001/MM1Servletmmsproxy=217.31.233.18 mmsport=9401 name=Vodafone MMS apn=mms bearer_bitmask=0 protocol=IP roaming_protocol=IP authtype=-1 user=vodafone password=vodafone]
11:32:27.498 D/MmsService( 3618):[SendRequest@3fc839a] HTTP:POST http://217.31.233.18[36], proxy=217.31.233.18:9401, PDUsize=8610
11:32:27.499 I/MmsService( 3618):[SendRequest@3fc839a] HTTP:IPv4 provisioned
11:32:27.499 I/MmsService( 3618):[SendRequest@3fc839a] HTTP:User-Agent=Android-Mms/2.0
11:32:27.499 I/MmsService( 3618):[SendRequest@3fc839a] HTTP:UaProfUrl=http://www.google.com/oha/rdf/ua-profile-kila.xml
//约30秒后出现连接超时错误
11:32:58.593 E/MmsService( 3618):[SendRequest@3fc839a] HTTP:IO failure
11:32:58.593 E/MmsService( 3618):java.net.ConnectException:Connection timed out
10.0.0.172 10.97.84.104 HTTP HTTP/1.1 408 Request Time-out (text/html)
2.4 通过WiFi发送彩信( MMS over WiFi)
为了让MM在wifi中工作,操作员mcc mnc应启用“support_send_Mms_over_wifi”。这是QC添加的配置,此配置适用于MMS应用程序。根据OEM需求为相应的MCC和MNC配置配置的路径
谷歌代码路径:/packages/apps/CarrierConfig/assets/carrier_config_MCCMNC.xml
供应商代码路径:/vendor/qcom/proprietary/resource-overlay/common/CarrierConfig/res/xml/vendor.xml
- 应该有一个有效的mms APN,配置了mmsc url、mms代理和端口。
- 运营商应支持IWLAN。
- MMS PDN在modemDS级别上通过iwlan引入检查点。
- 错误:PS_NET_DOWN_RESON_UPREFERRED_RAT
- 如果WLAN不是MMS配置文件的首选项,则此错误将在呼叫启动阶段恢复。
日志片段:
//具有profileid 3和APN的AP MMS呼叫
MSG[05000/01] Data Services/Medium15:35:08.327 ds_qmi_fw_common.c 00970 Handling (qmi_svc_hdlr_ftype) qmi_wdsi_start_network_interface
MSG[05022/01] DS ACL Policy/Medium15:35:08.329 ps_route.c 00310 3GPP APN Len 3, 3GPP APN mms
MSG[05000/02] Data Services/High 15:35:08.342 ds_iwlan_s2b_rt_acl.c 00489 ds_iwlan_s2b_rt_acl_is_cfg_supported. WLAN not preffor profile 7.Return FALSE.
// 0x200d6=PS_NET_DOWN_REASON_UNPREFERRED_RAT and ACL_DENY_REASON_UNPREFERRED_RAT =106
MSG [05000/03] Data Services/Error 15:35:08.350 ps_route.c 01616 ps_route_network_selection_by_policy():Routing failed net_down_reason:0x200d6 acl_deny_reason:-106
//检查点:请检查dsfconfig文件并相应地更改MMS APN的prefRAT,如下所示
andsf.xml file
<Node>
<APN>MMS</APN>
<RoutingRule>
<Node>
<AccessTechnology>3</AccessTechnology> -->Ilwan is the 1st priority.
<AccessNetworkPriority>1</AccessNetworkPriority>
</Node>
<Node>
<AccessTechnology>1</AccessTechnology>
<AccessNetworkPriority>2</AccessNetworkPriority>
</Node>
</RoutingRule>
<IsAPIOverride>0</IsAPIOverride>
<RulePriority>1</RulePriority>
注意:对于所有其他原因代码故障,请参阅文档80-P8754-84,因为通过wifi和vowifi发送MMS会导致代码不稳定。
3 已知问题及其解决方案
3.1 在 Android N 中,用户在发送彩信后手机数据关闭
【背景】
当移动数据关闭时,应可发送MMS,发送MMS后,应自动禁用移动数据。
【解决方案】
当数据未启用且mms apn处于断开状态时,清除MMS apn连接
对于Android N:
//telephony/java/android/telephony/CarrierConfigManager.java
public class CarrierConfigManager {
*/
publicstaticfinalStringKEY_ALLOW_NON_EMERGENCY_CALLS_IN_ECM_BOOL = "allow_non_emergency_calls_in_ecm_bool";
-
+
+ publicstaticfinalStringKEY_ENABLE_MMS_WITH_MOBILE_DATA_OFF =
+ "config_enable_mms_with_mobile_data_off";
+
/** The default valueforevery variable. */
privatefinalstatic PersistableBundlesDefaults;
public class CarrierConfigManager { sDefaults.putString(KEY_MMS_UA_PROF_URL_STRING, "");
sDefaults.putString(KEY_MMS_USER_AGENT_STRING, "");sDefaults.putBoolean(KEY_ALLOW_NON_EMERGENCY_CALLS_IN_ECM_BOOL, true);
+ sDefaults.putBoolean(KEY_ENABLE_MMS_WITH_MOBILE_DATA_OFF, true);
+
}
//src/java/com/android/internal/telephony/dataconnection/DcTracker.java
publicclass DcTrackerextends DcTrackerBase {
// request goesaway. Thisapplies to bothCDMAand GSMbecausethey both
//can declarethe DUN APN sharable by default traffic, thus stillsatisfying
// thoserequestsand not torn down organically.
- if(apnContext.getApnType() == PhoneConstants.APN_TYPE_DUN &&teardownForDun()) {
+ if(apnContext.getApnType() == PhoneConstants.APN_TYPE_DUN &&teardownForDun()
+ ||apnContext.getState() != DctConstants.State.CONNECTED
+ || (!getDataEnabled() &&apnContext.getApnType() == PhoneConstants.APN_TYPE_MMS
+ &&apnContext.getState() == DctConstants.State.CONNECTED)) {//add condition if dataenableis false &&apn is mms &&mms stateisconnected, set
cleanup = true.
+
cleanup = true;
} else {
cleanup = false;
3.2 即使Android O中的移动数据关闭,也应该发送MMS
【背景】
除了安卓O上的手机卡,当数据开关关闭时,我们默认无法正常发送和接收彩信。
【解决方案】
若需要其他操作员支持此功能,则可以配置相应载波的carrier_metered_apn_types_string
代码修改:
//Device/qcom/common/device/overlay/packages/apps/CarrierConfig/res/xml/vendor.xml
<string-array name="carrier_metered_apn_types_strings"num="4">
<itemvalue="default"/>
<itemvalue="dun"/>
<itemvalue="supl"/>
<itemvalue="fota"/>
删除CarrierConfigManager.java中的 KEY_CARRIER_METERED_APN_TYPES_STRINGS 字符串中删除mms,然后重新测试。
publicstaticfinalStringKEY_CARRIER_METERED_APN_TYPES_STRINGS = "carrier_metered_apn_types_strings";
sDefaults.putStringArray(KEY_CARRIER_METERED_APN_TYPES_STRINGS, newString[]{"default", "mms", "dun", "supl"});
4 log 收集
1. ADB logs
- adb shell logcat -v time-b radio > logcat_radio.txt
- adb shell logcat -v time > logcat.txt
2. 使用默认QXDM logmask
3. 要在所有接口上收集的TCP DUMP命令
- adb shelltcpdump -iany -s 0 -w/data/tcpdump.pcap
1万+

被折叠的 条评论
为什么被折叠?



