android2.2应用开发之IccCard(sim卡或USIM卡)(转至 http://www.2cto.com/kf/201306/223784.html)
2014-07-04 11:04
471 查看
如果要做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时表明手机卡已经装载好,可以去读手机卡的数据了。
一般的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时表明手机卡已经装载好,可以去读手机卡的数据了。
相关文章推荐
- android2.2应用开发之IccCard(sim卡或USIM卡)
- android2.2应用开发之IccCard(sim卡或USIM卡)
- android2.2应用开发之IccCard(sim卡或USIM卡)第一篇
- android2.2应用开发之IccCard(sim卡或USIM卡)第一篇
- android2.2应用开发之IccCard(sim卡或USIM卡)第一篇
- android2.2应用开发之IccCard(sim卡或USIM卡)
- android2.2应用开发之IccCard(sim卡或USIM卡)
- 对SingleTask和TaskAffinity的理解(转至 http://www.2cto.com/kf/201311/254450.html)
- Windows phone 应用开发[12]-Pex 构建自动化白盒测试[下] 转:http://www.cnblogs.com/chenkai/archive/2012/01/29/2331263.html
- VC各种链接错的解决办法【转】http://www.2cto.com/kf/201203/124100.html
- Java IO流详尽解析(转自 http://www.2cto.com/kf/201312/262036.html)
- 移动应用安全开发指南(Android)--完结篇(http://www.bubuko.com/infodetail-577312.html)
- 史上最强大ios app网络抓取 from http://www.2cto.com/net/201306/221430.html
- 基于B/S体系结构开发应用系统 (转载http://lw.mumayi.com/htmldata/96/100/2005_11/article-33794_1.html)
- SQL Server 2000 元数据应用(一):获得数据库的用户表 http://www.cnblogs.com/ClarkChan/archive/2006/10/26/540933.html
- C开发CGI以及sqlite数据库http://www.liniu.cn/post/c-cgi-sqlite.html
- 关于net2.0里面新出现的类backgroundworker的应用 --引用自http://www.cnblogs.com/dlwang2002/archive/2006/12/07/585093.html
- 使用DotMSN 2.0开发MSN机器人 http://www.cnblogs.com/hjf1223/archive/2008/01/16/dotmsn_robot.html
- 使用NetBeans6开发OSGi应用(4)——Servlet与Http服务[88250原创]
- 使用NetBeans6开发OSGi应用(4)——Servlet与Http服务[88250原创]