读UIM卡中短信的代码结构
管理UIM卡中的信息 pref_title_manage_uim_messages pref_key_manage_uim_messages
packages/apps/Mms/src/com/android/mms/ui/MessagingPreferenceActivity.java
mManageUimPref ->ManageSimMessages.class
packages/apps/Mms/src/com/android/mms/ui/ManageSimMessages.java
startQuery -> ...
-------------------------------provider-----------------------------------------
packages/providers/TelephonyProvider/src/com/android/providers/telephony/SmsProvider.java
query match== SMS_ICC+MAX_MATCH_TYPE -> getSingleMessageFromIcc
getSingleMessageFromIcc -> smsManager.getAllMessagesFromIcc
frameworks/base/telephony/java/android/telephony/SmsManager.java
getAllMessagesFromIcc -> iccISms.getAllMessagesFromIccEf
frameworks/base/telephony/java/com/android/internal/telephony/cdma/RuimSmsInterfaceManager.java
getAllMessagesFromIccEf -> mPhone.getIccFileHandler().loadEFLinearFixedAll(IccConstant.EF_SMS, response);
注:buildValidRawData ArrayList<SmsRawData> ret if(STATUS_ON_ICC_FREE) ret.add(null) else ret.add(new SmsRawData(...));
frameworks/base/telephony/java/com/android/internal/telephony/IccFileHandler.java
loadEFLinearFixedAll -> obtainMessage(EVENT_GET_RECORD_SIZE_DONE)
loadEFLinearFixedAll -> phone.mCM.iccIO(COMMAND_GET_RESPONSE, ...);
根据下面LOG中红色部分,就可以确定代码流程。
等到COMMAND_GET_RESPONSE返回,就要响应消息EVENT_GET_RECORD_SIZE_DONE了,
然后就调phone.mCM.iccIO(COMMAND_READ_RECORD,....); 然后在EVENT_READ_RECORD_DOWN消息中循环。
frameworks/base/telephony/java/com/android/internal/telephony/RIL.java
iccIO -> RILRequest.obtain(RIL_REQUEST_SIM_IO, result);
hardware/ril_c/reference-ril/reference-cpb71.c
requestSIM_IO
-----------------------------LOG------------------------------
RILJ [0495]> iccIO: SIM_IO 0xc0 0x6f3c path: 3F007F25,0,0,15
RIL onRequest: SIM_IO
RILJ [0496]> iccIO: SIM_IO 0xb2 0x6f3c path: 3F007F25,1,4,176
RIL onRequest:SIM_IO
AT AT(card:21)> AT+CRSM=178,28476,1,1,4,176
AT AT(card:21)< +CRSM:......
--------------------------------------------------------------
frameworks/base/telephony/java/com/android/internal/telephony/IccFileHandler.java
static protected final int COMMAND_READ_RECORD = 0xb2;
static protected final int COMMAND_GET_RESPONSE = 0xc0;
=============================================================================================
解码后,发现,日期显示为1970-1-1
frameworks/../telephony/cdma/SmsMessage.java
createFromEfRecord cdma_sms_decode
SmsProvider.java getAllMessagesFromIcc SmsMessage message = messages.get(i); message.getTimestampMillis();
SmsMessage.java mWrappedSmsMessage.getTimestampMillis();
SmsMessageBase.java return scTimeMillis;
SmsMessage.java scTimeMillis =
BearerData.java TimeStamp
super(TimeZone.getDefault().getID());

浙公网安备 33010602011771号