zoukankan      html  css  js  c++  java
  • SIM卡信息的管理

     

    MTK平台上,所有插入到手机中的SIM卡的信息都会存储在数据库com.android.providers.telephony中。

    原始的数据库

     

    图表 1 SimInfo数据表的结构

    从上图示中,我们可以看到siminfo表的大致结构,包含字段:_id, display_name, name_source, number, display_number_format, icc_id, color, slot, operator, data_roaming。Siminfo表的ContentProvider过程在TelephonyProvider类中,完成数据表建立、升级、常规操作(增删改查)等。

     

    图表 2 siminfo的URI

    这样,我们就可以通过类似于Uri.parse(“content://telephony/siminfo”)的方式来进行数据库的日常操作了。

    代码结构

    为使用方便,MTK添加了几个实用类,SimInfoManager(mediatek/frameworks/base/telephony/java/com/mediate/telephony/SimInfoManager.java)和SIMInfo(frameworks/opt/telephony/src/java/android/provider/Telephony.java)来对siminfo表进行操作,先来看一下一个整体的类图:

     

    图表 3 MTK平台管理SIM卡信息的代码结构

    在平台上,MTK有两个框架来提供SIM卡信息的访问服务,一个基于SIMInfo,另一个基于SimInfoManager(可能与平台升级有关)。但是,对数据库的访问都是通过SimInfoManager来操作的,SIMInfo类不直接操作数据;其通过SimInfoManager来完成功能;所以在两者之间,会有一个Adapter来完成适配工作。

    SimInfoManagerAdp的工作比较简单,就是直接调用SimInfoManager中相同的接口来完成本身的功能,看:

     

    图表 4 SimInfoAdapter的适配工作

    SimInfoManager类中的各方法,会根据其需要的功能来进行数据库操作,仅看一例:

     

    图表 5 SimInfoManager进行数据库操作

     

    表中的数据如何插入

    在MT6582平台上,MTK添加了一个类来做SIM卡信息的更新:SimInfoUpdate,其主要是针对SIM卡插入、交换、拔除等用户操作来对siminfo表做一些更新操作,并给出相关提示信息,常见的就是我们开机后的SIM卡状态提示。

    类中,监听了几个广播消息,基于此来对数据表进行更新。

     

    图表 6 SimInfoUpdate监听的广播

    这个类开放出来的接口主要是:updateSimInfoByIccId(String, String, String, String, Boolean):根据形参中SIM卡的iccid,与当前siminfo表中所有有slot_id值的记录做一次比对,确定SIM卡是否交换卡槽或者是新卡;并根据结果来更改(插入或更新)数据表。最后,对于插入新卡、移除SIM卡操作进行设置(设置Color、DefaultName等)和更新。最后向外弹出提示框,并发送广播ACTION_SIM_INFO_UPDATE。

  • 相关阅读:
    每日英语:Universities in Singapore strengthen cooperation with China
    每日英语:The Exercise Equivalent of a Cheeseburger?
    每日英语:Eating Safely in China, on a Budget
    每日英语:What Makes A RiskTaker
    OAuth2 vs JWT,到底怎么选?
    Docker 为什么输给了Kubernetes?Docker 员工自述!
    90 岁程序员,他的压缩算法改变了世界!
    数据库设计的 10 个最佳实践!
    代码写的垃圾被嫌弃?这 3 个插件你值得拥有!
    ShardingJdbc 实现读写分离 + 分库分表,写得太好了!
  • 原文地址:https://www.cnblogs.com/caidi/p/3939464.html
Copyright © 2011-2022 走看看