彩信接收流程 猜想:彩信通知信息->插入数据库->通知上层->自动/手动接收彩信
http://blog.csdn.net/hitlion2008/article/details/7166075
根据http://www.cnblogs.com/jimwind/archive/2013/05/28/3103701.html
插入数据库表中未下载的彩信大小为20480B,即为20KB,因此,应该从源头数据就错了。
先从Provider插入数据的地方查:
packages/providers/TelephonyProvider/src/com/android/providers/telephony/*
找pdu表的操作流程:
跟踪发现在MmsProvider.java insert(Uri uri, ContentValues values)中,取values的MESSAGE_SIZE仍是20480
next question, who call insert?
接收彩信,先接收短信,分析RIL层:
RIL.java
class RILReceiver implements Runnable public void run()
processResponse(Parcel p) type == RESPONSE_UNSOLICITED
processUnsolicited(Parcel p) case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS:
responseCdmaSms(Parcel p){ SmsMessage.newFromParcel(p, mPhoneId);}
SmsMessage.java
newFromParcel PHONE_TYPE_CDMA == activePhone
com.android.internal.telephony.cdma.SmsMessage.newFromParcel(p);
packages/apps/Mms/src/com/android/mms/transaction/TransactionService.java
private boolean processTransaction(Transaction transaction) -> transaction.process -> [ RetrieveTransaction | SendTransaction | ReadRecTransaction | NotificationTransaction ]
packages/apps/Mms/src/com/android/mms/transaction/RetrieveTransaction.java
public void process() -> new Thread(this).start(); -> run()
packages/apps/Mms/src/com/android/mms/transaction/TransactionService.java
protected int beginMmsConnectivity() mConnMgr.startUsingNetworkFeature()
frameworks/base/core/java/android/net/ConnectivityManager.java
frameworks/base/services/java/com/android/server/ConnectivityService.java
public int startUsingNetworkFeature(int networkType, String feature, IBinder binder)
frameworks/base/core/java/android/net/MobileDataStateTracker.java