androi智能手机彩信问题分析总结 下载本文

android彩信问题分析总结

彩信简介

本文主要介绍android手机上的问题如何定位。

彩信(MMS,Multimedia Messaging Service),也称为多媒体信息服务,通过该功能,可以传送比短信服务稍微大一点的文件,比如可以发送图片,录音等文件给别的用户。即使我们不经常发彩信,但是平时手机上接收的手机报也是彩信。

彩信要发送比较大的文件,它的传输的方式跟短信不一样,短信的发送在CS域就能完成,而彩信是在PS域来进行的。

既然彩信在PS域上进行,那发送彩信和上网的原理基本是一样的,发送的过程就跟在上网的过程中给别人传文件一样,接收彩信就跟上网过程的下载文件一样。

跟上网一样,发彩信也是要激活PDP(以UMTS来举例,UMTS激活数据业务相当于激活PDP, 如果是CDMA建立的是PPP连接),只不过彩信的PDP不能长时间维持,发送完或者接收完彩信就应尽快关闭,避免影响正常的上网。

激活PDP成功后,要保证数据链路是通的,手机和彩信中心才能进行业务数据的交互,因此分析彩信的问题可以从2个大方面入手:一、检查彩信的PDP是否激活;二、查看数据链路是否通畅。

分析步骤

检查点一:RIL是否有Data call

在RIL层检查彩信的PDP是否有DATA CALL,并且能够成功激活,从这一步就可以检查问题出在RIL层之上还是之下。如果没有DATA CALL,那么问题就出在RIL之上,继续在framework找原因;如果有DATA CALL,但是返回错误,那么就得继续在RIL层下面的modem来找原因。 要检查这一步,可以在Radio log搜SETUP_DATA_CALL,如下面成功的激活卡2的cmwap,如果成功,会返回IP地址,DNS地址,网关等参数。 06-21 14:37:53.888 D/RILJ ( 1337): [3499]> SETUP_DATA_CALL 4 0 cmwap null null 0 IP [SUB1] 06-21 14:37:54.978 D/RILJ ( 1337): [3499]< SETUP_DATA_CALL DataCallResponse: {version=9 status=0 retry=-1 cid=0 active=2 type=IP' ifname='rmnet0' addresses=[10.49.110.46/30] dnses=[221.130.33.60,221.130.33.52] gateways=[10.49.110.45]} [SUB1] (注:android的log可以抓radio,main,system的log,比如adb logcat –b radio就是抓radio的log。)

检查点二: 检查是否满足激活数据业务的条件

在第一步的检查过程中,如果问题发生的时间点并没有DATA CALL,那么问题应该在framework里没有满足发起DATA CALL。

发起DATA CALL是由framework的dcTracker(data connection tracker)来控制要不要发起的,当不满足条件,就不会触发,比如卡尚未加载完成,PS域尚未附着,数据漫游开关没打开等等。

在radio log 搜isDataAllowed,如果有条件不满足,会显示哪些条件不满足,如下面PS没附

着上,如下面就是刚开机的情况下,Sim卡尚未加载完成。

06-21 14:33:43.628 D/GsmDCT ( 1337): [MSimDCT:0] isDataAllowed: not allowed due to - Attached= false - SIM not loaded and not NV subscription 检查点三:检查是手机问题,还是网络原因

在第一步,如果发现RIL层下面返回了错误,需要进一步查看是网络的问题还是手机问题,最直接就是查看手机跟网络之间的OTA消息,如果是网络返回的错误,那么就能在OTA看出,如果OTA交互正常,或者没有activate pdp的OTA消息,却返回给上层错误值,那么就得检查手机的modem的处理流程是否正常了。

检查点四:应用有没有发彩信的请求

应用要发彩信,要首先要请求激活mms类型的apn,ConnectivityManager提供的接口StartUsingNetworkFeature可以用来激活。可以在system log里搜startUsingNetworkFeature,如果有搜到,说明对应的时间点应用有请求激活彩信PDP

检查点五:检查彩信PDP激活的时间长度

上面提到,彩信的PDP不能一直处于激活状态,因为有可能影响正常的上网,应用发完会主动关闭,超时也会主动关闭,有时候发彩信时间不够的话,就会造成发送失败,我们可以查看一下PDP处于激活的时间

Apncontext:mms会记录彩信的状态,一次可以搜[ApnContext:mms] setState来查看CONNECTED和DISCONNECTED之间的时间。在radio log里搜Radio log 搜 [ApnContext:mms] setState即可

ConnectivityService也会记录数据连接的状态,因此在system log里搜ConnectivityService: ConnectivityChange for mobile_mms 就可以查看彩信的连接状态的变化。

检查点六:检查彩信的数据账户是否能成功设置

对于双卡的手机,以Qualcomm 平台为例,如果以不同的账户来发彩信,那么发彩信之前,还要设置数据账户,只有向modem设置成功后,才能激活对应账户的数据业务。设置数据账户在modem主要是要把切换的目标账户PS域给激活,这样目标账户才能激活PDP;同时把以前的账户的PS域给去激活。

如果目标账户发彩信不成功,得先看是否已经切换数据账户到目标账户上,在Radio log里搜RIL_REQUEST_SET_DATA_SUBSCRIPTION,如下面成功切到卡2 06-21 14:42:42.928 D/RILJ ( 1337): [3681]> RIL_REQUEST_SET_DATA_SUBSCRIPTION [SUB1] 06-21 14:42:42.938 D/RILJ ( 1337): [3681]< RIL_REQUEST_SET_DATA_SUBSCRIPTION [SUB1]

检查点七:PDP激活后,有没有配置相应的网口

如果一个PDP,一般会配置相应的网口,如下图的rmnet0是up的。在命令窗口通过adb shell,然后输入netcfg就可以查看所有网口设备的状态。

如果手机支持多PDP,发彩信激活的PDP和上网激活的PDP不一样,那么对出现2个网口,那么怎么应用怎么知道从哪个网口出去呢?这就是下面的另一个检查点:路由。

检查点八:检查有没有配置相关的路由

激活一个PDP,需要配置相应的路由,才能把数据包从相应的网口发出去,路由可以通过ip route来查看。