如果要做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]

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时表明手机卡已经装载好,可以去读手机卡的数据了。

更多相关文章

  1. Android自学笔记-17-广播接收者(BroadcastReceiver)
  2. Android(安卓)LocalBroadcastReceiver本地广播
  3. Android短信Receiver优先级
  4. Android通讯录管理(获取联系人、通话记录、短信消息)(一)
  5. Android(安卓)仿美团大众字母索引实现
  6. 关于Android系统的局域网广播的相关东东
  7. 详解广播机制(借鉴郭霖老师著作)
  8. 【Android基础笔记22】BroadcastReceiver广播接收者 、Expandabl
  9. android中两个app之间广播,并且在接收者中对话框显示

随机推荐

  1. Android模拟器adb命令介绍
  2. 003.android资源文件剖析(Resources)
  3. Android(安卓)rom开发:通过拨号使用暗码打
  4. JAVA数据结构及算法--Android中Activity
  5. (转载)Android之Intent的基本使用
  6. Android(安卓)模拟器窗口大小的修改
  7. Android上的Open×××-TAP模式/策略路由
  8. Android(安卓)SDK Installed On Mac
  9. 从头构建android 本地C++语言可执行程序
  10. Android(安卓)Studio IDEA:基于IDEA的安卓