您的位置:首页 > 移动开发 > Android开发

android源码开发 MTK 平台下获取双卡双待SIM卡信息

2014-10-30 14:49 381 查看

MTK 平台下获取SIM卡信息

此处分析仅分析双卡双待,单卡可使用android API 读取(不作分析)这里的分析,只给出源码理解思路,普通应用开发不适宜
import com.mediatek.encapsulation.android.telephony.EncapsulatedTelephony;import com.mediatek.encapsulation.android.telephony.EncapsulatedTelephony.SIMInfo;
很显然不用怀疑,MTK已经对SIMInfo做好了封装,我们只需要读取就那最有可能做出双卡双待选择使用的短信Mms.apk发送应用来看这里具体的应用不做过多分析,有时间下次会写出来我们进入到com.android.mms.ui.ComposeMessageActivity千万不要小看了这个Activity,这是android短信应用编辑发送短信最核心界面还有一个是com.android.mms.ui.ConversationList毫不夸张的说,这两个Activity构成了短信应用好了 我们进入到 ComposeMessageActivity在onCreate()函数下
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);............./// M: Code analyze 007, Get information from Sim or save message to Sim.(Get all SIM info) @{mGetSimInfoRunnable.run();/// M:}
很显然 MTK很聪明的加入了自己的部分
Runnable mGetSimInfoRunnable = new Runnable() {public void run() {getSimInfoList();mUiHandler.sendEmptyMessage(MessageUtils.UPDATE_SENDBUTTON);}};
private void getSimInfoList() {mSimInfoList = SIMInfo.getInsertedSIMList(this);mSimCount = mSimInfoList.isEmpty()? 0: mSimInfoList.size();}
初始化之后我们已经知道了SIMInfo那么接下来需要的就是知道要怎么处理关联
public void onClick(View v) {if (v == mSendButtonSms || v == mSendButtonMms || v == mSendButtonIpMessage) {。。。。。。。。。。checkRecipientsCount();...............}}
private void checkRecipientsCount() {.......simSelection();.....}
简单解释一下以上两个函数,首先检查收件人是否为空(checkRecipientsCount()),相应的就是选择收件人呢
private void simSelection() {if (EncapsulatedFeatureOption.MTK_GEMINI_SUPPORT == false) {confirmSendMessageIfNeeded();} else if (mSimCount == 0) {} else if (send_sim_id >= 1) {mSelectedSimId = send_sim_id;send_sim_id = -1;confirmSendMessageIfNeeded();} else if (mSimCount == 1) {mSelectedSimId = (int) mSimInfoList.get(0).getSimId();confirmSendMessageIfNeeded();} else if (mSimCount > 1) {// multi sim cards exist.Intent intent = new Intent();mSelectSimType = SIM_SELECT_FOR_SEND_MSG;intent.putExtra(SELECT_TYPE, SIM_SELECT_FOR_SEND_MSG);if (isRecipientsEditorVisible()) {if (mRecipientsEditor.getRecipientCount() == 1/*isOnlyOneRecipient()*/) {mAssociatedSimId = getContactSIM(mRecipientsEditor.getNumbers().get(0));} else {mAssociatedSimId = -1;}} else {if (getRecipients().size() == 1/*isOnlyOneRecipient()*/) {mAssociatedSimId = getContactSIM(getRecipients().get(0).getNumber())} else {mAssociatedSimId = -1;}mMessageSimId = EncapsulatedSettings.System.getLong(getContentResolver(),EncapsulatedSettings.System.SMS_SIM_SETTING, EncapsulatedSettings.System.DEFAULT_SIM_NOT_SET);if (mMessageSimId == EncapsulatedSettings.System.DEFAULT_SIM_SETTING_ALWAYS_ASK ||(mMessageSimId == EncapsulatedSettings.System.SMS_SIM_SETTING_AUTO && MmsConfig.getFolderModeEnabled())) {showSimSelectedDialog(intent);updateSendButtonState();} else if (mMessageSimId == EncapsulatedSettings.System.DEFAULT_SIM_NOT_SET) {if (mAssociatedSimId == -1) {showSimSelectedDialog(intent);updateSendButtonState();} else {mSelectedSimId = mAssociatedSimId;confirmSendMessageIfNeeded();}} else {//DEFAULT SIMif (mAssociatedSimId == -1 || (mMessageSimId == mAssociatedSimId)) {.....}}}}
上面函数,稍作解释如果没有卡,就提示如果只有一张卡,就默认如果有2张卡就分为与收件人关联的SIM卡系统设定的默认卡两种讨论
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: