这几天通过对各个厂商的双卡信息适配的研究,总结了几点规律,写这篇心得主要是为了能够抛砖引玉,和大家一起分享,一起讨论,源码已上传。

一、android5.0以上(包含5.0)的版本双卡信息适配:

1、参数名意义:

slotId(simId):卡曹值Id,对应物理卡槽的位置0表示主卡位,1表示副卡位,-1表示无卡;

subId:据说是对应存放双卡信息数据库中的索引id,这个id目前只能从android5.0开始才能获取的到,获取需要用到的方法为

SubscriptionManager.getSubId(int slotId),注意的是这个方法返回的是一个long(5.0)/int类型数组,取数组第一个;

(获取某些特定的信息需要用到subid,但大部分情况都是用slotId)

2、信息获取

imei:telephonyManager.getDeviceId(int slotid),获取imei;

imsi:telephonyManager.getSubscriberId(int slotid),获取imsi;

operator:telephonyManager.getSimOperator(long/*5.0*//int subid),这里要特别注意的是,获取operator需要用subid,并且,在android5.0版本,getSimOperator方法的参数类型为long,之后的版本改成了int,在反射获取方法的时候要特别注意;

simState:telephonyManager.getSimState(int slotid),获取手机sim卡的状态码;

以上信息的获取方法,在5.0到6.0之间都是被系统隐藏的方法,从6.0开始方法公开。

defaultDataSlotId:默认上网卡,5.0到6.0之间获取方法为,先获取subId,static SubscriptionManager.getDefaultDataSubId(),方法为隐藏的;再通过static SubscriptionManager.getSlotId(long/*5.0*//int subId),方法个版本都为隐藏的;从7.0开始方法名变为static SubscriptionManager.getDefaultDataSubscriptionId(),方法也变为公开的;获取指定卡槽的SmsManager对象实例:5.0版本获取方法为static SmsManager.getSmsManagerForSubscriber(long subId),方法为隐藏的;从5.1版本开始获取的方法名为static SmsManager.getSmsManagerForSubscriptionId(int subId),方法是公开的,特别注意的是这里的参数类型也由long变为了int;

subId的获取:static SubscriptionManager.getSubId(int slotId),此方法一直被隐藏,从未公开。

二、android5.0一下版本双卡信息适配:

因为谷歌官方在5.0以上才开始对手机双卡进行支持,所以在5.0以下都是厂商自己加入了自定义的类来维护对双卡的支持,下面根据几个大的厂商来讲解下他们自定义了哪些类来支持低版本的双卡功能:

1、联发科:MTK在低版本中的TeleManager中加入了一些方法,命名规则是xxxxGemini(),比如获取指定imei好就是getDeviceIdGemini(int slotId),以此类推,但要注意的是,获取operator和imsi传入的参数不再是subId了,而是统一改用slotId去获取;此外,联发科在新增了几个类:

android.telephony.gemini.GeminiSmsManager , com.mediatek.telephony.SmsManagerEx:这两个是指定sim卡发送短信用的,SmsManagerEx发送短信的方法是SmsManagerEx.getDefault().sendDataMessage(String desAddr, String scAddr, short port, byte[] data, PendingIntent sendIntent,PendingIntent deliveryIntent, int slotId);与原API中不同的是参数列表最后多传了一个slotId用于指定用哪张sim卡发送;而GeminiSmsManager不一样的地方是它在每个方法名后面都加了一个后缀Gemini,例如发送短信的方法就是static GeminiSmsManager.sendDataMessageGemini(String desAddr, String scAddr, short port, byte[] data, int slotId, PendingIntentsendIntent,PendingIntent deliveryIntent);

com.mediatek.telephony.TelephonyManagerEx:这个类是用于获取手机的imei、imsi、operator等信息用的,获取信息对应的方法名和原API中的TelephonyManager基本一致。

这几个自定义隐藏类大家可以把类反射出来看看里面有哪些内容。

2、高通:

android.telephony.MSimTelephonyManager:这个类是高通对低版本手机获取imei、imsi、operator等信息的兼容,获取信息的方法名基本和原API的TelephonyManager一致,注意的是,获取operator信息的方法参数与联发科的一样都改为了用slotId获取而不是subId。

android.telephony.MSimSmsManager:发送短信的类,调用方式为 MSimSmsManager.getDefault().sendDataMessage(String desAddr, String scAddr, short port, byte[] data, PendingIntent sendIntent,PendingIntent deliveryIntent, int slotId),与原API的SmsManager不同的是,参数列表最后多了一个slotId,指定用哪张卡发送短信。

像华为、三星、小米等这些厂商都对低版本的双卡手机做了一定的修改,目前暂未收集完所有的获取信息,希望有知道的同学可以一起分享,完善对双卡手机信息的适配。

android 短信数据库 双卡,关于android双卡手机sim卡信息采集适配的心得相关推荐

  1. 关于android双卡手机sim卡信息采集适配的心得

    关于android双卡手机sim卡信息采集适配的心得 这几天通过对各个厂商的双卡信息适配的研究,总结了几点规律,写这篇心得主要是为了能够抛砖引玉,和大家一起分享,一起讨论,源码已上传. 一.andro ...

  2. Android短信数据库简析

    如果想跳过数据库介绍,直接看数据库操作代码的话,请点击这里: 读取Android短信 -------------– Android短信数据库: 读取Android系统所有短信 读取Android短信会 ...

  3. Android 短信数据库详细总结分析

    Android 短信数据库详细总结分析 短信 sms  文件 /data/data/com.android.providers.telephony/databases/mmssms.db  这个数据库 ...

  4. android 短信迁移到iphone,将安卓手机上的短信导入到iphone上的方法

    很多用安卓手机的朋友们换iphone5之后,之前手机里的一些数据想倒到新手机里都是比较棘手的问题,尤其是不同的操作系统,像android--ios这样,今天看到个新方法,特意转过来给大家分享一下,方法 ...

  5. android短信数据库类型,安卓短信收发 mmssms.db数据库和查询简介

    Android 手机信息存放在mmssms.db数据库,位于data/data/com.android.providers.telephony/databases下. 短讯息主要用到sms表和thre ...

  6. Android 短信数据库重要table字段解释

    短信数据存储在 /data/user_de/0/com.android.providers.telephony/databases/mmssms.db(7.0及8.0) 短信的主要涉及表格有两个pdu ...

  7. Android短信数据库相关

    系统的短信库存在data/data/com.android.providers.telephony/databases/mmssms.db 打开mmssms.db 再打开sms表 因为所有短信数据都储 ...

  8. android 短信数据库在哪个文件夹,安卓手机的短信备份后存到了哪个文件夹下

    打开备份短信的方法: 1.通过电脑找回手机短信内容的最基本思路,即将保存手机短信容的数据库文件传输到电信上,用相关手机信看工具进找回,对此需要借助第三方ROOt工获取手机ROOT权限. 2.并非所有手 ...

  9. android 短信ril移植,将Android平台的RIL层移植到基于LINUX的通用平台的研究与实现...

    摘要:本文通过对Android RIL层代码分析,将android RIL层功能在纯LINUX平台上实现,完全脱离了Android系统.为基于LINUX的通用平台实现一套成熟的RIL层代码,并开发出相 ...

最新文章

  1. 0x55. 动态规划 - 环形与后效性处理(例题详解 × 6)
  2. iOS Xcode8的适配
  3. [LintCode] Wildcard Matching
  4. oa部署mysql_oa系统部署
  5. unity ui插件_用Unity制作GalGame/视觉小说游戏的模型素材与插件推荐
  6. 详细介绍 安装ns3步骤
  7. Golang配置文件解析-oozgconf
  8. 实例浅析javascript call by value与call by reference
  9. java随机一个数字和字母_java怎么实现随机4个带有数字和字母的验证码?
  10. RabbitMQ(3) Spring boot集成RabbitMQ
  11. 逆水寒服务器维护公告,逆水寒1月3日更新了什么 逆水寒1月3日更新维护公告
  12. oracle优化方法,九大Oracle性能优化基本方法详解
  13. 四旋翼无人机学习第5节--STM32最小系统外围电路分析
  14. 当我开始学微信公众号开发时,我要学什么?
  15. openssl s_client s_server双向认证
  16. 技术面试中常见的问题以及提升建议
  17. 【三维点云处理】PCA主成分析+实践(一)
  18. 洛谷4550 收集邮票(期望DP)
  19. K8s安装dashboard可视化界面
  20. python十个实战项目

热门文章

  1. 软件工程---(下) 大工复习必考内容
  2. 名帖320 启功 行书《古体诗十二屏》
  3. HTTPS安全网站访问
  4. 微信小程序使用vant时报警告
  5. 安卓4.2版本以上时连接HC06蓝牙模组失败的问题及其解决方案
  6. uniAPP手机端文件预览
  7. 世界上最牛的100张照片
  8. 敏捷中的过程改进实践和工具
  9. 人机对弈是计算机什么应用,转载【哪个围棋人机对弈软件最好】
  10. 【Flutter 问题系列第 46 篇】如何修改 Flutter 项目的包名