Telephony--彩信问题分析方法

本文探讨了彩信发送及接收中的常见问题,包括数据能力请求失败与HTTP请求失败的情况,并分析了通话过程中彩信收发的具体场景。

彩信的发送跟短信不同,走的是PS域,所以在对彩信问题进行分析的时候要结合网络环境,注网信息等。彩信的问题同样也需要从接收方和发送方着手,所以最好让测试提供两份log加问题时间点的截图。

彩信的发送需要请求获取数据能力,如果主卡是卡一,然后卡二进行彩信业务,那么卡二会请求数据能力,发送allow_data的请求,直接搜关键字就可以看数据能力的切换是否成功。

当数据能力切换成功之后,彩信就会使用http进行请求,网址就是彩信头的发送过来的地址。彩信收发出现的网络问题可能发生在数据切换,或者是http请求的时候。

1.彩信重传问题

1.1彩信在allow_data的时候就失败了

allow_data失败的原因有很多,现在以其中一种为例,其他的处理方法类似。allow_data请求数据能力主要发生在PhoneSwitcher.java文件中。在下发了RIL_REQUEST_ALLOW_DATA的AT指令之后,在PhoneSwitcher就会对返回的信息进行判断,如果有异常也是在这个类里面处理。

DEVICES_IN_USE,当时出现这种错误是由于卡二获取数据业务的时候,主卡卡一来电话了,电话的优先级比切换数据的优先级要高,所以就导致了切换数据的失败,错误为DEVICES_IN_USE,发生了这种错误的时候代码中需要对其进行处理,解决方案为当电话挂断的时候调用resendDataAllowed方法,重新请求获取数据能力。

1.2彩信在http请求的时候失败了

手机正常发起了network request,访问短信中心,请求下载彩信,之后在http请求的过程中出现错误,例如IO failure,类似于这种的错误很有可能是网络临时错误,可以通过wireshake过滤出手机与短信中心交互的TCP流,然后看下有什么明显的错误提示。

Line 39981: 11-10 10:29:42.584  3540 14547 D MmsService: [SendRequest@35427c4] MmsNetworkManager: start new network request

Line 40415: 11-10 10:29:43.308  3540 24806 I MmsService: NetworkCallbackListener.onAvailable: network=264

Line 40494: 11-10 10:29:43.357  3540 14547 D MmsService: [SendRequest@35427c4] APN name is 3gwap

Line 40495: 11-10 10:29:43.357  3540 14547 I MmsService: [SendRequest@35427c4] Loading APN using name 3gwap

Line 40504: 11-10 10:29:43.366  3540 14547 I MmsService: [SendRequest@35427c4] Using APN [type=mms mmsc=http://mmsc.myuni.com.cn mmsproxy=10.0.0.172 mmsport=80 name=中国联通3G联通彩信(China Unicom) apn=3gwap bearer_bitmask=0 protocol=IPV4V6 roaming_protocol=IPV4V6 authtype=-1]

Line 40507: 11-10 10:29:43.371  3540 14547 D MmsService: [SendRequest@35427c4] HTTP: POST http://mmsc.myuni.com.cn[24], proxy=10.0.0.172:80, PDU size=111739

Line 40509: 11-10 10:29:43.371  3540 14547 I MmsService: [SendRequest@35427c4] HTTP: User-Agent=ASUS-X017D-Android-Mms/2.0

Line 40510: 11-10 10:29:43.371  3540 14547 I MmsService: [SendRequest@35427c4] HTTP: UaProfUrl=http://uaprofile.asus.com/uaprof/ASUS-X017D_1.xml

Line 40552: 11-10 10:30:14.448  3540 14547 E MmsService: [SendRequest@35427c4] HTTP: IO failure

Line 40553: 11-10 10:30:14.448  3540 14547 E MmsService: java.net.ConnectException: Connection timed out

Line 40554: 11-10 10:30:14.448  3540 14547 E MmsService:         at java.net.PlainSocketImpl.socketConnect(Native Method)

2.通话过程中的彩信收发

由于很多手机都是单通的,所以只要有一张卡占用了射频资源,另外一张卡就没办法使用数据业务。通话过程中的收发彩信可以分为以下两种情况:

2.1卡一通话,卡二接收彩信

如上所述,单通的手机只有一张卡能使用射频资源,所以卡一通话过程中,卡二的数据业务是没办法用的,但是由于彩信的接收会先收到彩信头,也就是一条短信,所以通话过程中,还是可能接收到一条有彩信的通知的。

2.2卡一通话,卡一接收彩信

如果卡一是注册在IMS上,进行volte通话的过程中是可以进行彩信的收发的,因为都是走PS域,所以对于这种问题要先确认手机是否注上了volte,进行的是volte通话;

如果卡一是注册在4G上,但是没有进行volte通话,那么会回落到2、3G进行通话,那么数据业务是没办法使用的,但是如果注册的网络支持dtm功能的话,CS和PS是可以并行的,那么通话过程中是可以进行彩信的收发的;

Log如下:

[3007/0002/0003/0004] MSG 06:14:26.176 NAS MM/High [ mmsend.c 3539] DS: SUB 1 =MM= MM sent MMR_CELL_SERVICE_IND: hsdpa_supp=0, dtm_supp=1, egprs_supp=1

通过 ADB 调试发送彩信(MMS)通常涉及模拟发送 MMS 的行为,或者通过调试 Android 应用程序的组件来触发相关功能。以下是几种实现思路操作方式: ### 1. 启动 MMS 应用并模拟发送流程 可以使用 `adb shell am start` 命令启动默认的彩信应用,并进入发送界面。例如,在大多数设备上,系统短信应用会处理 MMS 发送请求。 ```bash adb shell am start -n com.android.mms/.ui.ComposeMessageActivity ``` 此命令将打开彩信编辑界面,用户可以在界面上手动输入内容并发送[^1]。 ### 2. 使用 ContentResolver 插入彩信数据 如果需要更自动化的测试方式,可以通过插入彩信数据库记录的方式模拟发送。这通常需要 root 权限或在调试环境中进行。例如,使用 `adb shell content` 工具插入一条 MMS 消息: ```bash adb shell content insert --uri content://mms --bind address:s:1234567890 --bind body:s:"This is a test MMS message" ``` 该命令向 MMS 数据库中插入一条记录,但不会实际发送彩信,仅用于测试界面显示或调试消息结构[^2]。 ### 3. 触发 MMS 发送广播 某些设备支持通过广播意图触发 MMS 发送流程。例如: ```bash adb shell am broadcast -a android.provider.Telephony.WAP_PUSH_RECEIVED --es "address" "1234567890" --es "body" "Test MMS via ADB" ``` 此方法可能因设备厂商定制而异,需结合具体 ROM 行为进行适配[^1]。 ### 4. 使用 dumpsys 查看 MMS 状态 如果目的是调试 MMS 发送过程中的问题,可以使用 `dumpsys` 工具查看与彩信服务相关的状态信息: ```bash adb shell dumpsys activity provider com.android.mms ``` 这有助于分析当前 MMS 提供者的运行状态、权限设置及数据访问情况[^3]。 ### 5. 使用 Monkey 进行自动化操作 对于 UI 层面的测试,可使用 `adb shell monkey` 模拟用户操作,包括点击“发送”按钮等: ```bash adb shell monkey -p com.android.mms -c android.intent.category.LAUNCHER 1 adb shell monkey --throttle 500 -p com.android.mms 100 ``` 上述命令将启动彩信应用并模拟一系列用户交互事件,适合压力测试回归测试场景[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值