Android4.X读取SIM卡短信和联系人相关类实例分析

本文实例讲述了Android4.X读取SIM卡短信和联系人相关类。分享给大家供大家参考,具体如下:

1. IccSmsInterfaceManager

这个类的主要作用有两个

<1>通过 SMSDispatcher,发送短信数据
<2>更新和查询SIM卡的短信数据

IccSmsInterfaceManager 是一个Binder 服务类,Binder接口是 ISms.
IccSmsInterfaceManager 被创造时 Binder服务会被注册。
IccSmsInterfaceManager 在PhonProxy 中被创建,并且持有对应的PhoneBase 对象。
读取SIM卡上的短信数据时,是通过 PhoneBase的IccFileHandler 去读取的,IccFileHandler 调用 RIL 对象去向Modem 发命令,相关代码如下:

fh.loadEFLinearFixedAll(IccConstants.EF_SMS, response);

向SIM卡保存短信数据时,是通过 PhoneBase 的RIL 对象去操作的,RIL对象向Modem 发命令。相关代码如下:

if (PhoneConstants.PHONE_TYPE_GSM == mPhone.getPhoneType()) {
 mPhone.mCi.writeSmsToSim(status, IccUtils.bytesToHexString(smsc),
   IccUtils.bytesToHexString(pdu), response);
} else {
 mPhone.mCi.writeSmsToRuim(status, IccUtils.bytesToHexString(pdu),
   response);
}

2. IccPhoneBookInterfaceManagerProxy

这个类主要用于更新和查询SIM卡上的联系人数据.它是IccPhoneBookInterfaceManager的代理。IccPhoneBookInterfaceManager 是一个Binder服务。根据PhoneBase 的不同,IccPhoneBookInterfaceManager有两个实现类,SimPhoneBookInterfaceManager 和 RuimPhoneBookInterfaceManager.IccPhoneBookInterfaceManager 在 PhoneBase 对象的创造过程中构造,他会持有一个PhoneBase对象。

IccPhoneBookInterfaceManagerProxy 在PhoneProxy 对象的创造过程中构造。IccPhoneBookInterfaceManagerProxy的创造过程中完成 Binder 服务 IccPhoneBookInterfaceManager的注册,并且持有 IccPhoneBookInterfaceManager对象。
IccPhoneBookInterfaceManager持有一个 AdnRecordCache. 对象。这个对象来自于IccRecords 。IccRecords 来自于 PhoneBase 对象。PhoneBase 通过监听 UiccController 的状态来更新对应 SIM卡的IccRecords.

可以这么理解,每次SIM卡状态发生变化后,UiccController 首先通过UiccCardApplication 更新SIM卡的状态以及更新从SIM卡里读取的数据。然后,再通知UiccController 的监听者(PhoneBase,IccCardProxy),告诉他们SIM卡的相关数据已经发生了改变,他们可以更新这些数据(IccRecords)。

希望本文所述对大家Android程序设计有所帮助。

(0)

相关推荐

  • Android4.X中SIM卡信息初始化过程详解

    本文实例讲述了Android4.X中SIM卡信息初始化过程详解.分享给大家供大家参考,具体如下: Phone 对象初始化的过程中,会加载SIM卡的部分数据信息,这些信息会保存在IccRecords 和 AdnRecordCache 中.SIM卡的数据信息的初始化过程主要分为如下几个步骤 1.RIL 和 UiccController 建立监听关系 ,SIM卡状态发生变化时,UiccController 第一个去处理. Phone 应用初始化 Phone 对象时会建立一个 RIL 和UiccCont

  • android监控sim卡有没有服务示例(sim卡管理)

    复制代码 代码如下: public class UniteqService {public static final String LOG_TAG = "UniteqService";public boolean DEBUG = true;private boolean hasService = false;//是否有服务private PhoneStateListener[] mPhoneStateListener;//监听双卡private TelephonyManager mPh

  • Android获取手机SIM卡运营商信息的方法

    本文实例讲述了Android获取手机SIM卡运营商信息的方法,对于Android程序设计有非常实用的价值.分享给大家供大家参考之用.具体方法如下: 主要功能代码如下: /** * 获取SIM卡运营商 * * @param context * @return */ public static String getOperators(Context context) { TelephonyManager tm = (TelephonyManager) context .getSystemServic

  • Android获取手机通讯录、sim卡联系人及调用拨号界面方法

    android获取手机通讯录联系人信息 复制代码 代码如下: private void getPhoneContacts() {        ContentResolver resolver = this.getContentResolver();                // 获取手机联系人       Cursor phoneCursor = resolver.query(Phone.CONTENT_URI,                  new String[] { Phone

  • 举例讲解Android应用中SimpleAdapter简单适配器的使用

    SimpleAdapter,跟名字一样,一个简单的适配器,既为简单,就只是被设计来做简单的应用的,比如静态数据的绑定,不过仍然有自定义的空间,比如说在每一个ListItem中加一个按钮并添加响应事件.首先还是先看一下SimpleAdapter的定义吧,直接翻译下SDK doc 吧: 这是一个简单的适配器,可以将静态数据映射到XML文件中定义好的视图.你可以指定由Map组成的List(比如ArrayList)类型的数据.在ArrayList中的每个条目对应List中的一行.Maps包含每一行的数据

  • Android 判断SIM卡是中国移动\中国联通\中国电信(移动运营商)

    第一种方法: 获取手机的IMSI码,并判断是中国移动\中国联通\中国电信 TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); /** 获取SIM卡的IMSI码 * SIM卡唯一标识:IMSI 国际移动用户识别码(IMSI:International Mobile Subscriber Identification Number)是区别移动用户的标志, * 储存在

  • Android读取用户号码,手机串号,SIM卡序列号的实现代码

    1.使用TelephonyManager提供的方法,核心代码: 复制代码 代码如下: TelephonyManager tm = (TelephonyManager) this.getSystemService(TELEPHONY_SERVICE);String imei = tm.getDeviceId();       //取出IMEILog.d(TAG, "IMEI:"+imei);String tel = tm.getLine1Number();     //取出MSISDN,

  • 浅析Android手机卫士sim卡绑定

    读取sim卡的序列号,保存起来,一旦sim发生变更了,认为是小偷的sim卡,发出警告 读取sim卡序列号 获取TelephonyManager对象,通过getSystemService(TELEPHONY_SERVICE) 调用TelephonyManager对象的getSimSerialNumber()方法,得到String类型的序列号 把序列号保存在SharedPreences里面 需要加权限 android.permission.READ_PHONE_STATE 检测sim卡是否变更 使用

  • Android手机卫士之绑定sim卡序列号

    现在开始具体 处理每一个导航页面的逻辑,首先看第二个导航页 这里需要实现绑定sim卡序列号的功能,注意添加相应的权限:uses-permission android:name="android.permission.READ_PHONE_STATE" private SettingItemView siv_sim_bound; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(sa

  • Android 判断SIM卡属于哪个移动运营商的实现代码

    复制代码 代码如下: [java]public String getProvidersName()  {    String str = "N/A";    try    {      this.IMSI = this.telephonyManager.getSubscriberId();      System.out.println(this.IMSI);      if (this.IMSI.startsWith("46000"))       str = &

随机推荐