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

最新文章

  1. 最少知识原则(Least Knowledge Principle)
  2. php实现的IMEI限制的短信验证码发送类
  3. Nutch配置:nutch-default.xml详解
  4. framework&&library's root
  5. Android开发之android:process=":remote"
  6. c# winform 把彩色图片转换为灰色的图片,变灰,灰度图片,速度很快,safe,unsafe
  7. 自己写一个与startWith类似的判断方法
  8. NSLayoutConstraint-代码实现自己主动布局的函数使用方法说明
  9. 上传图片带预览功能兼容IE和火狐等主流浏览器
  10. 浅谈Block传值-匿名函数(代码块)
  11. Qt编程之d指针与q指针
  12. C语言宏定义技巧
  13. Objective-C实现常用的4种排序算法
  14. URL传递中文参数乱码问题
  15. UART、SPI和I2C详解
  16. 2018蓝桥杯 省赛D题(测试次数)
  17. nohup 部署springboot 使用命令
  18. MATLAB:图像水平、垂直、水平垂直镜像、转置、旋转变换(flipdim、mirror、transp、imrotate函数)
  19. jenkins在windows平台自动化构建代码
  20. 表单样式form.css

热门文章

  1. Boost Thread学习笔记三
  2. 贴一个CMemDC 代码,这东西真不错噢,短小精悍,可谓极品
  3. MFC实现多风格真彩色大图标工具栏按钮
  4. Win32环境下的程序崩溃异常定位
  5. 无法安装vmware tools的解决方PLEASE WAIT! VMware Tools is currently being installed on your system. Dependin
  6. QT 多线程程序设计(也有不少例子)
  7. innerHTML与appendChild(newnodeText)的区别
  8. 获取sina,baidu,google财经历史和实时股票数据接口
  9. android端向服务器提交请求的几种方式
  10. git for windows (又名 msysgit)如何记住用户名和密码