天天看點

android2.2應用開發之IccCard(sim卡或USIM卡)

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;

[java]  ​

​view plain​​ ​

​copy​​

  1. public void onReceive(Context con, Intent intent) {  
  2.         Log.i(TAG,"receive");  
  3.         if(intent.getAction().equals(TelephonyIntents.ACTION_SIM_STATE_CHANGED)){  
  4.             Log.i(TAG,"SIM_STATE_CHANGED"+intent.getStringExtra(IccCard.INTENT_KEY_ICC_STATE));  
  5.             if(intent.getStringExtra(IccCard.INTENT_KEY_ICC_STATE).equals(IccCard.INTENT_VALUE_ICC_LOADED)){  
  6.                   Log.i(TAG,"READY to start service");  
  7.                   Intent i = new Intent(con,SimContactsService.class);  
  8.                   i.putExtra("ICC_LOADED", "READY");  
  9.                   con.startService(i);  
  10.             }  
  11.         }  
  12.    }  

對,這個廣播即TelephonyIntents.ACTION_SIM_STATE_CHANGED,字元串是:"android.intent.action.SIM_STATE_CHANGED",系統在發這個action廣播的時候會在intent裡附加一個IccCard.INTENT_KEY_ICC_STATE的資料,說到這裡大家應該知道IccCard會有好幾種狀态,具體多少大家可以去查源碼,我這裡當狀态為IccCard.INTENT_VALUE_ICC_LOADED時表明手機卡已經裝載好,可以去讀手機卡的資料了。