tyle="margin:20px 0px 0px; font-size:14px; line-height:26px; font-family:Arial; color:rgb(51,51,51)">
???? 如果要做android通訊錄的聯系人的機卡混排顯示,由于手機卡類型的不同,導致手機卡存儲容量以及可以存儲信息不同,就要涉及到android去讀Icc卡的信息。
????? 一般的sim卡只能存儲姓名跟一個電話號碼,而USIM卡還可以存多個電話號碼跟郵箱,所以編輯卡上聯系人的時候應該動態的去布局,或者應用可以去寫死,讓USIM卡的存儲信息與SIM卡一致。
???? 由于本人是在源碼上開發的,用SDK開發的朋友有些類或方法以及屬性可能引用不到,這是由于用的谷歌沒有公開的API導致,望大家不要莫名其妙。
????? 1、讀取ICC卡的類型:
??? 由于我只需要去區分sim和USIM,所以返回的不是USIM的我都視為sim,這個大家可以根據需要自己去改。
??? import android.os.SystemProperties;
????public? String getSimType(){
???????? if (SystemProperties.get("gsm.sim.card.type", "SIM").contentEquals ("USIM")){
???????????? return "USIM";
???????? }else{
???????????? return "SIM";
???????? }
??? }
??????2?、是否有ICC卡:
??????????? import android.telephony.TelephonyManager;
??????????? boolean hasIcc = ((TelephonyManager) getSystemService
??????????????????????????? (Context.TELEPHONY_SERVICE)).hasIccCard();
???????
???????3、何時導手機卡上的聯系人既sim卡聯系人導入的時機:
?????????一般大家會想到開機就導唄,接收boot_completed的消息然后啟動一個service去導,那我這里告訴大家一個系統發的廣播,比boot_completed時間發出的更早些。
注意:這個廣播只有插入手機卡的情況下才會去播出,沒有插卡式不會播出去的。
import com.android.internal.telephony.IccCard;
import com.android.internal.telephony.TelephonyIntents;
?
- ????
- ??
- public?void?onReceive(Context?con,?Intent?intent)?{??
- ????????Log.i(TAG,"receive");??
- ????????if(intent.getAction().equals(TelephonyIntents.ACTION_SIM_STATE_CHANGED)){??
- ????????????Log.i(TAG,"SIM_STATE_CHANGED"+intent.getStringExtra(IccCard.INTENT_KEY_ICC_STATE));??
- ????????????if(intent.getStringExtra(IccCard.INTENT_KEY_ICC_STATE).equals(IccCard.INTENT_VALUE_ICC_LOADED)){??
- ??????????????????Log.i(TAG,"READY?to?start?service");??
- ??????????????????Intent?i?=?new?Intent(con,SimContactsService.class);??
- ??????????????????i.putExtra("ICC_LOADED",?"READY");??
- ??????????????????con.startService(i);??
- ????????????}??
- ????????}??
- ???}??
?
?
對,這個廣播即TelephonyIntents.ACTION_SIM_STATE_CHANGED,字符串是:"android.intent.action.SIM_STATE_CHANGED",系統在發這個action廣播的時候會在intent里附加一個IccCard.INTENT_KEY_ICC_STATE的數據,說到這里大家應該知道IccCard會有好幾種狀態,具體多少大家可以去查源碼,我這里當狀態為IccCard.INTENT_VALUE_ICC_LOADED時表明手機卡已經裝載好,可以去讀手機卡的數據了。
?