精华内容
下载资源
问答
  • 腾讯优测是专业app自动化测试平台,除了提供兼容性测试,...读取系统联系人数据库ContentProvider时,对于双卡双待手机,电话和短信数据都需要标识来自张卡。 Android 5.0开始加入Dual Sim支持,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开发过程中使用到系统数据库的时候,可能也会遇到类似的适配问题。这时,也可以使用类似的方式处理。


    文/腾讯优测 李艳超


    展开全文
  • 腾讯优测是专业app自动化测试平台,除了提供兼容性测试,远程真机租用等多维度测试服务,还有...读取系统联系人数据库ContentProvider时,对于双卡双待手机,电话和短信数据都需要标识来自张卡。Android 5...
        

    腾讯优测是专业的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开发过程中使用到系统数据库的时候,可能也会遇到类似的适配问题。这时,也可以使用类似的方式处理。

    文/腾讯优测 李艳超

    展开全文
  • [1]使用WIFI功能时,经常性的操作是打开手机上的WiFi设备,搜索到心目中的热点,输入密码,联网成功,成功上网。这个看似简单的过程,背后却是隐藏着大量的无线通信技术。用几个专业术语来表示这个过程,分别是:...


    WiFi无线连接过程中有哪几个主要步骤?
    [1]
    在使用WIFI功能时,经常性的操作是打开手机上的WiFi设备,搜索到心目中的热点,输入密码,联网成功,成功上网。
    这个看似简单的过程,背后却是隐藏着大量的无线通信技术。
    用几个专业术语来表示这个过程,分别是:扫描(Scanning)、认证(Authentication)、关联(Association)。

    [2]
    扫描(Scanning):专业术语中的扫描可以简单粗暴的理解为搜索周边的WiFi热点。
    我们要加入一个无线网络,就需要找到它的网络名称,即SSID。
    这个SSID其实是接入点(Access Point)回应工作站扫描时所带的参数,还有其它的网络参数,
    包括BSSID(可理解为接入点的MAC地址)、信号强度、加密和认证方式等。
    扫描类型分两种,一种是主动扫描(active scanning),另一种是被动扫描(passivescanning)。
    主动扫描是主动寻找网。工作站主动发出Probe请求,然后等待接入点Probe响应。
    被动扫描是工作站会在信道列表(channel list)所列的各个信道之间不断切换,并静候Beacon帧的到来。

    [3]
    认证(Authentication):专业术语中的认证,常规的解释就是,用户输入密码的环节。
    找到WiFi热点之后,要加入该无线网络,就会弹出一个输入密码的窗口。
    当然,如果店家设置的是免密加入,用户就可以也不用输入密码的。这个过程叫做:认证(Authentication)。

    [4]
    认证过程中会涉及加密方式,
    目前主流的WiFi模块更倾向于WPA/WPA2加密方式,也就是我们在首次设置的时候选择的家庭网络的WPA-PSK/WPA2-PSK。
    在企业里,经常用到WPA/WPA2 Radius.

    [5]
    关联(Association):如果用户想通过AP接入无线网络,用户必须同特定的AP关联。
    当用户通过指定SSID选择无线网络,并通过AP认证后,就可以向AP发送关联请求帧。
    AP将用户信息添加到数据库,向用户回复关联响应。
    用户每次只可以关联到一个AP上,并且关联总是由用户发起。

    [6]
    WiFi模块的工作模式:WiFi模块工作模式有两种工作模式分别是AP和STA。
    AP就是热点也就是说它作为AP模式自身可以辐射出一个无线wifi网路。
    STA就是站点模式,客户端模式,也就是像我们电脑连接路由器一样,它相当于电脑的角色。
    现在高通芯片Android 8 系统都同事支持AP 和 STA。

    转载于:https://www.cnblogs.com/huangguanyuan/p/10393827.html

    展开全文
  • 是这么一个手机端,首先用户点击扫描,然后类似于支付宝之类的那种扫描,扫的是卡片或者文档之类的,扫的时候手机自动定位图片,然后生成图片,放在网页顶部,然后图片下面动态生成图片中的文字以及一些栏目选项,当...
  • 密码登录和手机验证登录两种登录类型,都存在一个登录按钮。【如下图所示】 要实现的功能:按下回车(Enter键)登录。 思路:按下回车登录时,需要判断此时选择了一种登录方式,然后才能进行登录。...

    Write By Monkeyfly

    以下内容均为原创,如需转载请注明出处。

    前提

    • 3种登录方式点击切换时,会隐藏其他的登录模块。
    • 密码登录手机验证登录两种登录类型中,都存在一个登录按钮【如下图所示】
      在这里插入图片描述
      在这里插入图片描述

    要实现的功能:按下回车(Enter键)登录。

    思路:在按下回车登录时,需要判断此时选择了哪一种登录方式,然后才能进行登录。即需要判断当前哪一个登录模块可见,并调用相应登录按钮的点击事件。

    主要的功能点:如何判断某个元素是否可见。 于是,就使用了 jQuery :visible 选择器

    代码如下:

    $(document).bind('keydown',function(e){
        if (e.keyCode == "13") {//keyCode=13是回车键
            if($("#pwdLogin:visible")){//如果是密码登录
                $("#accountSubmit").click();
            }else if($("#msgLogin:visible")){//如果是短信验证码登录
                $("#messageSubmit").click();
            }
        }
    }); 
    

    发现问题

    经过调试发现: if-else条件判断语句始终只会进入if语句,而else语句永远进不去。

    疑问:为什么呢?
    原因:如果找不到任何相应的匹配,则返回了一个空的 jQuery对象。如下图所示

    在这里插入图片描述

    我最初想的是:如果该元素可见就调用它对应登录按钮的点击事件。于是就直接这样写了if ( $("#pwdLogin:visible") ),并不知道该条件会一直为真,即使该元素不可见

    在这里插入图片描述

    解决问题

    随后,在控制台分别输出了$("#pwdLogin:visible")$("#msgLogin:visible")。想知道一直执行if( $("#pwdLogin:visible") )这个条件的具体原因是什么。【具体如下图所示】

    在这里插入图片描述

    看了输出结果,才发现我的写法有问题。像我这种写法,if语句的条件始终为真,就不可能进入else语句。

    所以,如果你要判断该元素是否可见,应该这么写:if( $("#pwdLogin:visible").length !==0 ){ }
    而不是这样写:if( $("#pwdLogin:visible") ){ }

    如下图所示:
    在这里插入图片描述

    因此,应该这样写:

    //注:长度不为0说明该元素可见,而不能直接通过:visible判断
    $(document).bind('keydown',function(e){
        if (e.keyCode == "13") {//keyCode=13是回车键
            if($("#pwdLogin:visible").length !==0){//如果是密码登录
                $("#accountSubmit").click();
            }else if($("#msgLogin:visible").length !==0){//如果是短信验证码登录
                $("#messageSubmit").click();
            }
        }
    });
    

    方法拓展

    首先,让我们学习一下Jquery 选择器 :visible的定义和用法。

    定义

    :visible选择器选取每个当前是可见的元素。即匹配所有的可见元素。

    除以下几种情况之外的元素就是可见元素:

    • 设置为 display:none
    • type="hidden" 的表单元素
    • widthheight 设置为 0
    • 隐藏的父元素(同时隐藏所有子元素)
    注意:

    jQuery 中,visibility: hidden;opacity: 0; 都被视作可见的,因为它们在页面上占据了相应的物理空间。

    用法
    $("ele:visible")
    

    后来经过百度,得到了jQuery判断元素可见性的其他方法:

    • if($(ele).is(":visible")) 显示:返回 true;隐藏:返回 false
    • if($(ele).css('display') == 'none') 表达式的判断
    • if($("#ele:visible").length !==0) 表达式的判断

    参考资料

    结束语

    至此,问题就已经被解决了。如果还有jQuery判断元素可见性的其他方法,欢迎大家留言补充。

    展开全文
  • 4、水印设置中的水印文件从来? 水印文件要先用PS等软件处理并保存为JPG图片,要做成透明的区域直接用白色的即可。 5、有时下载失败是什么回事? 淘宝网现在有限制同一个IP同一时间内不能访问太多次数。可以...
  • 深入揭示隐藏于高效办公背后的原理概念,并配合大量典型的应用实例,帮助读者全面掌握Excel文秘与行政管理工作中的应用技术。 本教程以解决实际工作中的常见问题为目标,不仅分专题详解Excel的应用,还设计了经验...
  • 软件工程教程

    热门讨论 2012-07-06 23:10:29
    通过演示及讲述,讲解课程设计的整体情况,针对其设计提出一些技术及细节问题确认是否真正理解课程设计中的要点、是否掌握了进行系统设计的知识和能力、是否本人完成。如通发现没有真正设计或者不清楚技术细节,则...
  • Config Client是Config Server的客户端,用于操作存储Config Server中的配置内容。微服务启动时会请求Config Server获取配置文件的内容,请求到后再启动容器 实现 创建配置中心,对Config Server进行配置,...
  • 实例203 隐藏应用程序任务栏中的图标 实例204 实现动态系统托盘图标 实例205 实现气泡提示窗口 实例206 从桌面右下角显示的Popup窗口提醒 实例207 设置可执行文件的生成图标 第10章 MDI窗体和继承窗体 10.1...
  • 实例203 隐藏应用程序任务栏中的图标 实例204 实现动态系统托盘图标 实例205 实现气泡提示窗口 实例206 从桌面右下角显示的Popup窗口提醒 实例207 设置可执行文件的生成图标 第10章 MDI窗体和继承窗体 10.1...
  • 实例203 隐藏应用程序任务栏中的图标 实例204 实现动态系统托盘图标 实例205 实现气泡提示窗口 实例206 从桌面右下角显示的Popup窗口提醒 实例207 设置可执行文件的生成图标 第10章 MDI窗体和继承窗体 10.1...
  • 新版Android开发教程.rar

    千次下载 热门讨论 2010-12-14 15:49:11
    ANDROID 推出后可能影响产业包括移动电信业,软件开发业,手机制造业,以消费者为核心状 态 。 对消费者影响 � 高档手机选择面增加。 � A ndroid 设计初期就考虑了与现其有业务融合,改变以往从...
  • Activity页面、IjkVideoView、自定义MediaController中都增加了OnKeyDown监听并加了日志。但这三处都没有日志输出。 如果控制器隐藏,按返回按钮,Activity页面会响应返回键,并输出日志...
  • 识别常见病毒,病毒一般是以隐藏形式藏匿计算机的文件,要把文件的隐藏属性打开。每一盘都有工具这个选项,如下图所示: 49 五.常用DOS命令 60 第一章COMS的设置 开机画面现在有两种,一种为AMI公司开发的,...
  •  实例203 隐藏应用程序任务栏中的图标 272  实例204 实现动态系统托盘图标 272  实例205 实现气泡提示窗口 275  实例206 从桌面右下角显示的Popup窗口提醒 276 实例207 设置可执行文件的生成图标 278 ...
  • 实例203 隐藏应用程序任务栏中的图标 272 实例204 实现动态系统托盘图标 272 实例205 实现气泡提示窗口 275 实例206 从桌面右下角显示的Popup窗口提醒 276 实例207 设置可执行文件的生成图标 278 第10章 MDI窗体和...
  • AirPlayer录屏大师

    2018-12-14 09:28:54
    苹果录屏大师(AirPlayer)是一款很实用的工具,苹果录屏大师(AirPlayer)操作简单,功能强大,能够将苹果手机设备中的视频、游戏、照片等内容投射到电脑电视屏幕上,只需通过WiFi就能够让用户体验到更好的视频、音乐...
  • C-Blog V2.0

    2005-11-29 11:00:29
    动态日历和完美文章归档功能,日历可直接选择特定月份和一天日志归档 .搜索结果采用高亮显示,红字 黄色背景(可按主题和内容搜索) .整合优化了模版 只需要6个模版文件 .添加模版方便,任何一个plog...
  • Nero注册码验证器

    2009-12-25 11:49:35
    另外一般刻录机或者机器自带OEM版NERO很多功能隐藏了起来,只要换一下注册号就能把那些没有显示的功能拉出来 本nero验证器使用十分简单。觉得软件好用不要忘记 光临我小站http://www.59fei.com哦 本程序...
  • linux复习题

    2018-06-24 20:11:23
    (3)已知管理员用户/R目录中,分别用绝对路径和相对路径方式写出将目录/R/C/T3/S0中的文件复制到/R/D/T5目录中的方法。 cp /R/C/T3/S0 /R/D/T5 cp /C/T3/S0 /D/T5 2、设计一个shell程序计算n的阶乘。要求: (1) 从...
  • // h5端全局悬浮引导用户下载app的功能 更多自定义要求/common/openApp.js修改 "openApp": { //点击悬浮下载栏后打开网页链接 "openUrl": '...
  • iPhone开发秘籍(第2版)--详细书签版

    热门讨论 2012-12-11 13:42:25
     《iphone开发秘籍(第2版)》提供了关于iphone sdk以及iphone开发的全面信息,对iphone sdk中的各种组件做了深入浅出的介绍,包括iphone 3.0 sdk的所有新增特性,同时对iphone开发的基本流程、基本原理和基本原则...
  • // h5端全局悬浮引导用户下载app的功能 更多自定义要求/common/openApp.js修改 "openApp": { //点击悬浮下载栏后打开网页链接 "openUrl": '...
  • // h5端全局悬浮引导用户下载app的功能 更多自定义要求/common/openApp.js修改 "openApp": { //点击悬浮下载栏后打开网页链接 "openUrl": '...
  • iPhone开发秘籍(第2版)--源代码

    热门讨论 2012-12-11 13:51:22
     《iphone开发秘籍(第2版)》提供了关于iphone sdk以及iphone开发的全面信息,对iphone sdk中的各种组件做了深入浅出的介绍,包括iphone 3.0 sdk的所有新增特性,同时对iphone开发的基本流程、基本原理和基本原则...

空空如也

空空如也

1 2
收藏数 36
精华内容 14
关键字:

手机中的隐藏功能在哪