这篇关于android源码是如何操作sim卡上的信息说明,sim\usim卡的信息说起来这算是比较特别的一部分,由于android源码的信息是没有开机自动导卡信息和联系人的,所以有时会忘掉它的存在应该说关于卡信息操作源码只是实现大部分功能:可以读和删除卡上信息,把信息复制到手机上,但是不能把信息写入卡,这个功能是要我们自己实现的,当然仅仅是实现就好了,毕竟基本的框架google已经写好了。先看看已有功能的代码,原理是一样的。

private static final Uri ICC_URI = Uri.parse("content://sms/icc");

private void startQuery() {

try {

mQueryHandler.startQuery(0, null, ICC_URI, null, null, null, null);

} catch (SQLiteException e) {

SqliteWrapper.checkSQLiteException(this, e);

}

}

根据上面的uri ICC_URI可以跟踪到SmsProvider.java的query()方法switch分支中的getAllMessagesFromIcc()方法,代码如下

private Cursor getAllMessagesFromIcc() {

SmsManager smsManager = SmsManager.getDefault();

ArrayList messages = smsManager.getAllMessagesFromIcc();

......省略部分代码......

}

看到一个SmsManager的对象,操作卡信息就看它了,这个类里有删、改、查相应的方法,查询调用的方法如下:

public static ArrayList getAllMessagesFromIcc() {

List records = null;

try {

ISms iccISms = ISms.Stub.asInterface(ServiceManager.getService("isms"));//AIDL

if (iccISms != null) {

records = iccISms.getAllMessagesFromIccEf();//我们关心这个,下面的代码

}

} catch (RemoteException ex) {

// ignore it

}

return createMessageListFromRawRecords(records);

}

public List getAllMessagesFromIccEf() {

if (DBG) log("getAllMessagesFromEF");

Context context = mPhone.getContext();

context.enforceCallingPermission(

"android.permission.RECEIVE_SMS",

"Reading messages from SIM");

synchronized(mLock) {                               //同步锁

Message response = mHandler.obtainMessage(EVENT_LOAD_DONE);

mPhone.getIccFileHandler().loadEFLinearFixedAll(IccConstants.EF_SMS, response);//这里是实际干活的语句

try {

mLock.wait();

} catch (InterruptedException e) {

log("interrupted while trying to load from the SIM");

}

}

return mSms;

}

上面那个IccConstants.EF_SMS的值十六进制6F3C,转成十进制是28476,这里告诉我们卡上的信息在卡上6F3C这个位置上,要操作卡的信息    要找到这个,为什么要找这个位置,相信3gpp 11.14这个文档有明确的解释的,还是先看看loadEFLinearFixedAll()做了什么吧。

public void loadEFLinearFixedAll(int fileid, Message onLoaded) {

Message response = obtainMessage(EVENT_GET_RECORD_SIZE_DONE,

new LoadLinearFixedContext(fileid,onLoaded));//消息队列

phone.mCM.iccIO(COMMAND_GET_RESPONSE, fileid, getEFPath(fileid),

0, 0, GET_RESPONSE_EF_SIZE_BYTES, null, null, response);//看到iccIO就快到ril了

}

RIl层的iccIO代码

public void iccIO (int command, int fileid, String path, int p1, int p2, int p3,

String data, String pin2, Message result) {

//Note: This RIL request has not been renamed to ICC,

//but this request is also valid for SIM and RUIM

RILRequest rr  = RILRequest.obtain(RIL_REQUEST_SIM_IO, result);//这个标志RIL_REQUEST_SIM_IO

.....省略部分代码,不影响我们跟踪代码......

send(rr);

}

这个标志RIL_REQUEST_SIM_IO在reference-ril.c的代码里可以找到,当然还有可能在别的文件中,毕竟是开源的代码,我们是可以修改或添加的。    最后关于操作卡信息at命令通常是at + crsm这样的形式, 命令格式 :+CRSM=[,[,,,[,]]]  command就下面这几种

176 READ BINARY

178 READ RECORD

192 GET RESPONSE

214 UPDATE BINARY

220 UPDATE RECORD

242 STATUS

操作sim卡的信息大致流程就是这些,当然对导卡而言不止有卡上信息,还有导卡上的联系人,sim卡的导卡操作相比usim卡的能简单些,usim卡能存储的信息相对多些,找东西要费点事,比如关于联系人的邮件地址,不过这已经不是信息里的活了。一般sim或usim卡能保存的信息是50条,也有例外只有20条或30条,实际容量要看具体的卡。

android+sim卡短信,android 信息(mms)开发(七)-- sim卡短信相关推荐

  1. DataScience:风控场景之金融评分卡模型的构建(逻辑回归)开发(转评分卡)、使用过程(线上实现)之详细攻略

    DataScience:风控场景之金融评分卡模型的构建(逻辑回归)&开发(转评分卡).使用过程(线上实现)之详细攻略 目录 风控场景之金融评分卡模型的构建(逻辑回归)&开发(转评分卡) ...

  2. android 信息(mms)开发(八)-- 彩信的解析

    本文要讲述是第二次解析--解析彩信正文,先贴张图见识下我们要解析的东东是个什么样子,见下图,初次见面和看天书差不了多少. 这个就是我们要面对的数据了,至于怎么拿到这些数据,方法很多,话说不是可以抓网络 ...

  3. android+彩信+预览音频,android 信息(mms)开发(八)-- 彩信的解析

    本文要讲述是第二次解析--解析彩信正文,先贴张图见识下我们要解析的东东是个什么样子,见下图,初次见面和看天书差不了多少. 这个就是我们要面对的数据了,至于怎么拿到这些数据,方法很多,话说不是可以抓网络 ...

  4. android studio怎么添加按钮,Android Studio 工具栏添加常用按钮

    本文中 Android Studio 的版本为 android Studio 2.2 ,操作系统为 Windows,如有操作不同,可能是版本差异. 在工具栏中添加一些常用的按钮,如设置.DDMS,有利 ...

  5. 图像视频信息库改直播服务器,短视频直播系统,开发流程详细解析

    原标题:短视频直播系统,开发流程详细解析 短视频直播系统的开发也分Android端和iOS端,不同端口对应不同的开发方式,使用不同的开发协议,与直播系统的开发流程相同,也是分五个步骤,今天就给大家详细 ...

  6. android复制sim卡上的短信到手机,将数据从SIM卡轻松传输到新手机的最佳方法

    购买新手机后,您需要将旧手机上的所有内容转移到新手机,包括SIM卡中的数据. 有时,当您将SIM卡中的文件切换到新智能手机时,可能会丢失该文件. 因此,您必须手动逐个添加联系人. 有没有有效的方法将S ...

  7. android复制短信到sim,Android开发之关于复制短信到SIM卡的分析.docx

    Android开发之关于复制短信到SIM卡的分析 Android开发之关于复制短信到SIM卡的分析 在framework层下的SmsManager类中,封装好了一个copyMessageToIcc方法 ...

  8. android分页查询垃圾短信数据库信息

    1.数据库 package com.example.yqqmobilesafe.db;import android.content.Context; import android.database.s ...

  9. android 华为 发送短信,增强信息来了!华为短信App全免费发送短彩信

    IT之家7月3日消息 刚刚,华为官方宣布,推出增强信息.现在使用华为短信App就可以免费发送短彩信了. 华为在EMUI 8.0推出融合通信,短信App已开启"增强信息"模式,增强信 ...

最新文章

  1. .net EF监控 MiniProfiler
  2. element ui表格点击整行选择_element-ui实现动态表头的表格问题汇总
  3. 摄像头poe供电原理_什么是POE供电,这种POE套装有什么优势呢?
  4. 编译Android源码
  5. base target=_self/IE6、IE7 用法(转)
  6. linux基础命令chown,Linux常用命令及组件:chown和chmod
  7. hdu 2255二分图最大权值匹配的KM 算法
  8. wordpress主题-响应式CUI2.0翠竹林博客主题wordpress模板分享
  9. Ubuntu 16.04直接升级至20.04 (Upgrade from 16.04 to 20.04 directly)
  10. webdriver 调用IE 问题
  11. Android通讯录(一)
  12. 【Multisim仿真+报告+演示视频】数电课设五人表决器Multisim仿真设计【全套资料】资源编号:YM5-V1.0.1-五人表决器
  13. 苹果4s怎么越狱_越狱源和插件大全2020.4.4
  14. 我常去的编程技术网站
  15. 【弃】Selenium官方文档中文版
  16. 4G的小程序与5G的Chromium OS?
  17. 浏览器主页被篡改解决方法
  18. bt4 linux 镜像,让你的启动U盘集合7个系统包括pe bt4 beibi q3 linux dos等
  19. 应用ArcGIS和COORD软件进行坐标七参数转换的方法
  20. 七大设计原则之接口隔离原则应用

热门文章

  1. MyBatis使用MySQL存储过程
  2. 【多题合集】网络流24题练习(更新至魔术球问题)
  3. 三维旋转四元数系列(0.复数基本介绍)
  4. python求1到n的乘积_Python实现矩阵相乘的三种方法小结
  5. 理想化的 Redis 集群
  6. [转载]拉格朗日乘子法如何理解?
  7. python requests库api_python利用requests库进行接口测试的方法详解
  8. android 广告设置秒数,Android动态显示具体到秒的相聚时间
  9. 解决EXC_BAD_ACCESS错误的一种方法--NSZombieEnabled
  10. 使用UMDH查找内存泄漏