iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >腾讯优测优分享干货精选| Android双卡双待适配——隐藏
  • 427
分享到

腾讯优测优分享干货精选| Android双卡双待适配——隐藏

2024-04-02 19:04:59 427人浏览 八月长安
摘要

腾讯优测是专业的app自动化测试平台,除了提供兼容性测试,远程真机租用等多维度的测试服务,还有优分享-腾讯内部的移动研发测试干货精选~许多APP都希望获取用户通讯录联系人,利用通讯录关系链信息来丰富产品功能

腾讯优测是专业的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

腾讯优测优分享干货精选| Android双卡双待适配——隐藏

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

腾讯优测优分享干货精选| Android双卡双待适配——隐藏

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

1.新增标识字段


常见于:三星、moto等

举例:手机的短信数据库

腾讯优测优分享干货精选| Android双卡双待适配——隐藏

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

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

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

(1)确定对应的卡槽

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

腾讯优测优分享干货精选| Android双卡双待适配——隐藏

2.mtk系列芯片新增siminfo表


常见于mtk系列芯片的手机

现象:

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

问题原因:

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

解释:

slot字段值为0:主卡

slot字段值为1:副卡

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

腾讯优测优分享干货精选| Android双卡双待适配——隐藏

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

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

腾讯优测优分享干货精选| Android双卡双待适配——隐藏

解决办法:

(1)确立映射关系

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

0—-4

1—-3

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

腾讯优测优分享干货精选| Android双卡双待适配——隐藏

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目录下内容

电话数据库适配:

使用查询数据库的工具

腾讯优测优分享干货精选| Android双卡双待适配——隐藏

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

短信数据库适配:

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

腾讯优测优分享干货精选| Android双卡双待适配——隐藏

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

腾讯优测优分享干货精选| Android双卡双待适配——隐藏

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

腾讯优测优分享干货精选| Android双卡双待适配——隐藏

数据库表关联关系:

腾讯优测优分享干货精选| Android双卡双待适配——隐藏

适配方法:

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

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

总结:

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


文/腾讯优测 李艳超


您可能感兴趣的文档:

--结束END--

本文标题: 腾讯优测优分享干货精选| Android双卡双待适配——隐藏

本文链接: https://www.lsjlt.com/news/41497.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql拒绝访问怎么办
    mysql 出现拒绝访问的原因和解决方法:权限问题:授予用户适当的数据库或表访问权限。防火墙或安全组:允许对 mysql 端口(3306)的入站连接。密码错误:重置 mysql 密码或使...
    99+
    2024-05-19
    mysql
  • mysql怎么比较日期大小
    mysql 中比较日期大小的方法包括:直接比较两个日期,使用 、= 运算符。使用 date_format() 函数将日期转换为字符串,然后比较字符串大小。使用 str_to_date()...
    99+
    2024-05-19
    mysql
  • mysql怎么加锁
    mysql中加锁是一种确保数据并发访问一致性的机制。加锁方式有:表级锁(对整个表加锁)和行级锁(对特定行加锁)。加锁类型有共享锁(允许读取但禁止修改)、排他锁(禁止读取和修改)和意向锁(...
    99+
    2024-05-19
    mysql 并发访问
  • mysql误删数据怎么恢复
    mysql误删数据可通过以下步骤恢复:停止数据库服务,防止数据覆盖。若开启binlog日志,可从中提取删除语句,再重新执行后将数据恢复。使用恢复工具修复表文件或恢复事务。从备份中恢复数据...
    99+
    2024-05-19
    mysql
  • 怎么判断mysql安装成功
    成功安装 mysql 的方法:检查命令行界面版本号;连接到 mysql 服务器,输入 "mysql -u root -p";创建数据库,输入 "create database test;...
    99+
    2024-05-19
    mysql linux macos 防火墙配置
  • mysql怎么修改表名
    如何修改 mysql 表名:检查当前表名:show tables;运行 rename table 语句:rename table 旧表名 to 新表名;验证更改:show tables;...
    99+
    2024-05-19
    mysql
  • mysql删除的表怎么恢复
    mysql 中已删除表的恢复方法主要涉及以下步骤:检查 binlog 日志以获取删除事务信息;使用数据恢复工具扫描数据库文件;从备份还原表数据;或联系 mysql 支持寻求帮助。 My...
    99+
    2024-05-19
    mysql 数据丢失
  • mysql复合主键怎么写
    在 mysql 中编写复合主键:在 create table 语句中使用 primary key 约束并列出字段名称。复合主键的好处包括提高查询效率、保证数据完整性和强制数据顺序。注意选...
    99+
    2024-05-19
    mysql
  • 怎么查看mysql数据库版本
    如何查看 mysql 数据库版本?连接到数据库并执行查询:select version();检查命令行或 mysql workbench 中的服务器属性。 如何查看 MySQL 数据库...
    99+
    2024-05-19
    mysql linux
  • 怎么检测mysql安装成功
    要验证 mysql 安装是否成功,请执行以下步骤:检查系统服务是否正在运行。使用 mysql 命令行工具连接到服务器。创建一个测试数据库并使用它。在数据库中创建一个测试表。插入测试数据并...
    99+
    2024-05-19
    mysql linux
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作