腾讯优测优分享干货精选| Android双卡双待适配——隐藏在数据库中的那些秘密

腾讯优测是专业的app自动化测试平台,除了提供兼容性测试,远程真机租用等多维度的测试服务,还有优分享-腾讯内部的移动研发测试干货精选~

许多APP都希望获取用户通讯录联系人,利用通讯录关系链信息来丰富产品功能。在读取系统联系人数据库的ContentProvider时,对于双卡双待手机,电话和短信数据都需要标识来自哪张卡。

Android 5.0开始加入Dual Sim支持,Android 官方方案和mtk的方案十分类似,感兴趣的小伙伴可以直接移步mtk方案实现方式。

双卡数据库适配流程

根据系统ContentProvider数据内容来做适配开发,找到区分双卡的标识字段和字段对应的值。为了以下阐述内容清晰,这里约定:主卡—0卡,副卡—1卡。

主要涉及的数据库表有两个:短信彩信、电话。

1.清空数据库


如果手机安装了安全软件有可能”污染“数据库数据,清空数据库中的数据可以保证以下操作的准确性。

2.使用系统短信程序和拨号程序分别使用1卡、2卡发送短信,拨打电话


保证使用的是系统短信和拨号程序,第三方APP会接管系统程序,开始操作前需卸载第三方APP。

3.读取数据库值,找到区分卡槽的值


对于可以root的手机,可以直接找到对应的数据库文件,导出后使用SQLite查看器来查询数据库中的值。

短信、彩信数据库位置:

/data/data/com.android.providers.telephony/mmssms.db

电话数据库位置:

data/data/data/com.android.providers.contacts/contacts2.db

注意:对应的.db-wal、.db-shm文件也需要导出,SQLite引入了日志预写模式(WAL),如果不导出这两个文件,数据更新不及时。

双卡数据库适配常见类型都有哪些?

1.新增标识字段


常见于:三星、moto等

举例:手机的短信数据库

通过上图,我们可以知道短信数据库表中:

标识双卡的字段名:sim_id,字段的值:卡0—-0 || 卡1—-1

这种情况相对简单,在做短信、电话相关的APP只需要:

(1)确定对应的卡槽

(2)需要数据库操作时,增加一列对于双卡标识字段的操作

2.mtk系列芯片新增siminfo表


常见于mtk系列芯片的手机

现象:

按照1中的方法找到了区分卡槽的字段和值,发现当用户换卡时,标识字段对应的值会随着变化,每换一张新卡,对应的simId值+1。

问题原因:

如下图所显示,这类手机新建了一张表,用来记录SIM卡的信息。对应的uri为:Uri uri = Uri.parse(“content://telephony/siminfo”);

解释:

slot字段值为0:主卡

slot字段值为1:副卡

slot字段值为-1:此卡没有安装在卡槽

如下图,sms表和siminfo表的映射关系。sms表中的simId字段存储的是siminfo表中对应的_id,siminfo中对应的0,1是卡槽的标识。

注意:siminfo表是系统维护的,第三方APP只需读取,不需要进行“写”操作。

解决办法:

(1)确立映射关系

在一定的触发时机(应用启动,监听iteminfo数据库信息变化),触发iteminfo表的查询,将查询结果建立成映射关系。

0—-4

1—-3

(2)需要操作时根据卡槽获得映射值写入db

mtk在双卡双待方面的积累是很深厚长久的,在功能机时代就有非常广泛的应用。那么为什么还要如此麻烦的新建一张表来做这个映射呢?为什么不使用方案1 简单的处理呢?

场景:

使用1中数据库新增字段的方法,对于WCDMA联通定制机(同时G卡制式),如果用户将两张卡对调位置,将会发生什么情况?

在方案1中,所有的信息直接和sms表中的双卡标识字段绑定,如果换卡的话将无法判断信息来自那个SIM卡,在上述的场景发生时,用户所有的信息和SIM卡发生混乱。

在方案2中,因为sms和siminfo存在映射关系,siminfo表中的icc_id可以唯一标识一张SIM卡,不会发生方案1中出现的换卡可能造成的信息错乱问题。

思考总结:

方案2的存在是合理的,因为方案1同时存在缺陷。

3. coolpad系列手机新增iteminfo表


常见于:酷派系列手机

特殊点:root没有成功,无法查看data/data目录下内容

电话数据库适配:

使用查询数据库的工具

清空db后操作:使用0、1卡分别向5520拨打电话,使用0卡向10010拨打电话。通过记录的查询结果可知,电话标识字段为moduletype,字段对应的值为0—–1 || 1——2

短信数据库适配:

清空db后向5520发送4条短信,见下图:

当使用查询工具查询结果时,会出现下图的情况,其中sim_id通常在方案1中作为双卡标识的字段,但是在这款手机上值均为-1。(可以注意到iteminfo字段中的值时累加的1、2、3、4)

查询iteminfo数据库表的结果:Uri.parse(“content://mms-sms/itemInfo”);

数据库表关联关系:

适配方法:

(1)每次在sms表插入一条数据,iteminfo会对应的增加一条记录,这个是由系统provider自动完成的。

(2)需要更新iteminfo中的数据中的network_type字段值来标识卡槽。

总结:

不仅系统联系人需要数据库适配,当APP开发过程中使用到系统数据库的时候,可能也会遇到类似的适配问题。这时,也可以使用类似的方式处理。

文/腾讯优测 李艳超

时间: 2024-07-30 17:52:09

腾讯优测优分享干货精选| Android双卡双待适配——隐藏在数据库中的那些秘密的相关文章

腾讯优测优社区干货精选|手Q刷一刷红包后台设计总结

文 / 腾讯 邓建俊 优测小优有话说: 以为优社区除了测试知识就没有其他东西啦?手Q大牛带你走一波红包的后台设计!!! 1. 前言 2016除夕夜注定是一个不平凡的夜晚,除了陪家人吃团圆饭.看春晚,还得刷一刷.摇一摇.咻一咻,忙得不亦乐.相信大部分读者也已经体验过手Q的刷一刷抢红包,玩法简单中奖率高,得到了许多用户的好评. 那么对于后台而言,要实现这个亿万级用户的抢红包系统,我们将会面临哪些问题? (1)海量的并发请求,预估峰值800w/s 800w/s的预估峰值请求,红包系统必须要保证在如此高

腾讯优测-优社区干货精选 | android开发在路上:少去踩坑,多走捷径(下)

文/腾讯公司 陈江峰 优测小优有话说: android开发的坑自然是不少,不想掉坑快来优测优社区~ 6.Android APP开发中其它需要提醒的问题 android4.4在UI线程无法进行网络操作.不单只android API版本不一定导致运行异常,有些机型还使用Java 1.5进行编译,使用某些Java 1.6的函数会Crash的.注意OOM问题,目前android手机已经有3G内存了,但并非一个应用就能使用全部内存.了解一下堆内存,一个软件至少一个进程,一个进程跑一个虚拟机,进程使用的堆内

腾讯优测-优社区干货精选 |安卓适配之Camera拍照时快门咔嚓声

文/腾讯优测研发工程师 吴宇焕 优测小优有话说: android机型适配的坑自然是不少,不想掉坑快来优测优社区~ 现在Android手机一般都会带有照相功能,有很多朋友就发现手机照相时快门声音很响,想关又关不掉.....不过话说回来,静音拍照你想做啥? 来到主题上,因为网络上有很多关于"删除或修改快门声音文件是关闭快门声的方法"的内容,所以我就不赘述了.今天我想和大家说的是:在开发中,针对camera的静音功能我们会遇到哪些机型兼容问题? 从Google官方API中也没有明确的指出关于

腾讯优测优社区干货精选|手Q红包后台设计

文 / 腾讯 邓建俊 优测小优有话说: 以为优社区除了测试知识就没有其他东西啦?手Q大牛带你走一波红包的后台设计!!! ------------------------------------------------------------------ 1. 前言 2016除夕夜注定是一个不平凡的夜晚,除了陪家人吃团圆饭.看春晚,还得刷一刷.摇一摇.咻一咻,忙得不亦乐.相信大部分读者也已经体验过手Q的刷一刷抢红包,玩法简单中奖率高,得到了许多用户的好评. 那么对于后台而言,要实现这个亿万级用户的

腾讯优测优分享 | 探索react native首屏渲染最佳实践

腾讯优测是专业的移动云测试平台,旗下的优分享不定时提供大量移动研发及测试相关的干货~此文主要与以下内容相关,希望对大家有帮助. react native给了我们使用javascript开发原生app的能力,在使用react native完成兴趣部落安卓端发现tab改造后,我们开始对由react native实现的界面进行持续优化.目标只有一个,在享受react native带来的新特性的同时,在体验上无限逼近原生实现.作为一名前端开发,本文会从前端角度,探索react native首屏渲染最佳实

腾讯优测干货精选| 安卓开发新技能Get -常用必备小工具汇总

文/腾讯公司 陈江峰 优测小优有话说: 移动研发及测试干货哪里找?腾讯优测-优社区你值得拥有~ 开发同学们都知道,安卓开发路上会碰到很多艰难险阻,一不小心就被KO.这时候,没有新技能傍身怎么行?今天我特意将自己使用过的安卓开发小工具进行了汇总,希望与大家共同进步. 话不多说,实用工具大讲堂现在开始! Lint(清理资源.安全检查.layout优化等) 一般在提测前清理一下冗余资源,查一下有没有用了一些高API Level才有的接口,查一下安全问题. Findbugs(检查java代码缺陷)在开发

腾讯优测| 让Android屏幕适配开发更简单-Google百分比布

文/腾讯优测工程师  吴宇焕 腾讯优测优社区干货精选~ 相信开发同学都被安卓设备碎片化的问题折磨过,市面上安卓手机的主流屏幕尺寸种类繁多,给适配造成很大的困难.就算搞定了屏幕尺寸问题,各种分辨率又让人眼花缭乱,当你走出了前面所说的两大坑,很有可能又掉进"屏幕长宽比不同"的陷阱... 说多了都是泪,我就想做一名安静的开发怎么这么难? 经历过无数次跌跌撞撞,我总结出一些经验,想与大家一起分享.已知的屏幕适配方法:(1)按像素比:y/开发时用的屏幕像素=x/用户设备像素(2)按长度:用dip

【腾讯优测干货分享】Android5.0-6.0双卡适配指南

作者:腾讯优测开发工程师 于长敏 这里仅以获取sim卡的IMSI接口(getSubscriberId)和发短信接口(sendTextMessage)为例来详细讲解一下Android5.0-6.0双卡适配的策略,其他方面的双卡适配方案跟4.4以前相比并无特别大的区别,之前我们已有专家对此进行过详细的总结,这里就不重复说明了. 从Android5.0开始,加入了对双卡的管理: 首先从数据库方面来看,其设计思路跟以前某平台是一样的,加入一个siminfo数据表到telephony.db来管理双卡的信息

【腾讯优测干货分享】鹅厂专家详解Android N适配要点

Google即将发布的Android7.0的预览版Android_N为我们增加了许多新的特性,其中包括多窗口的支持.通知栏支持直接回复.网络数据节省开关.以及新的DOZE模式等:下面我们就来谈一谈关于这些新功能的适配问题和需要注意的地方. 1.Doze(打盹模式)更加强大 该模式是在Android6.0中引入的,当用户设备未插电源.处于静止状态屏幕关闭时,该模式会推迟CPU和网络活动,从而增加电池寿命. 在Android_N中对这种模式进行了加强,当设备处于充电状态且屏幕已关闭一定时间后,设备会