当前位置: 首页 > news >正文

腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿

腾讯优测是专业的android自动化测试平台,拥有上千款真机,彻底解决android碎片化问题!
这里我要说的不是闪光灯的硬件特征,也不是说底层驱动的原理,我只是跟大家聊一聊在项目中遇到的一些关于闪光灯的让人挠头的几个问题,也许你也曾遇见过,那我们一起来回味;如果你没遇见过,那我的这篇文章会让你少走一点弯路。

一、判断手机是否有闪光灯

按照常理,我们在使用闪光灯之前需要先判断手机是否有闪光灯,我们常用的判断闪光灯的方法应该有以下两种:

根据腾讯优测数据库中的数据显示,在热门机型中:
使用方法一会有3.7%的机器结果错误,无法准确地判断出手机是否有闪光灯,主要的品牌包含:酷派、天语、联想、三星等。
使用方法二会有9.7%的机器结果错误,主要品牌包含:VIVO、金立、酷派、天语、朵唯、三星等。
如果产品中某个UI显示状态跟此结果相关,那么我们就需要针对这10%左右的手机做适配,设置机型开关明确指定问题机型是否有闪光灯,腾讯优测云测试平台可以提供相关数据和解决方案。

二、开启闪光灯

现象一:对焦可以开启闪光灯

如果我们设置闪光灯的模式为Parameters.FLASH_MODE_ON,那么当我们执行对焦操作的时候,(mCamera.autoFocus(null))闪光灯会亮,有人会说这个很正常,我并不跟大家纠结这个现象是否正确,我只是要告诉大家在热门机型中有46%的机型在这种情况下闪光灯会亮,另外54%的机型则不会亮,这是一种现象上的差异,每个产品根据自己的实际情况适当考虑这个问题。

现象二:不支持闪光灯常亮设置

如果你的App中有一个功能需要开启闪光灯常亮
(Parameters.FLASH_MODE_TORCH),那么你要有个心理准备,将有12%的手机不支持闪光灯常亮。

现象三:设置闪光灯常亮拍照后的图片ExifInterface闪光灯信息不正确

照片的ExifInterface信息中可以查看图片的旋转角度、拍摄时间、拍照时是否使用了闪光灯等信息,这些信息一般都是在生成照片时手机底层自动添加的,如果这个信息中闪光灯的使用情况对你的App有重要的用途时,你就要注意了,因为26%的手机在设置闪光灯为Parameters.FLASH_MODE_TORCH后拍照的照片信息中会返回“未使用闪光灯”的标识。
你可以尝试在拍照的时候自己去写入这个信息,但是成功率不是很高。

现象四:常亮状态与其他状态间的切换

前提条件是我们设置闪光灯为常亮,并且闪光灯成功常亮,此时我们在设置闪光灯模式为Parameters.FLASH_MODE_AUTO后闪光灯依然常亮,这样的机型约占热门机型的12%,遇到这种情况我们需要先设置闪光灯模式为Parameters.FLASH_MODE_OFF关闭闪光灯后再设置其他模式。
PS:有点小问题是有极个别手机设置闪光灯为常亮后即使设置
Parameters.FLASH_MODE_OFF也无法关闭闪光灯,但这种现象极其罕见,只占0.5%甚至更少,我们可以忽略不计,总不能每次切换都险释放Camera吧。

三、关闭闪光灯

既然开了,我们就要负责关。说实话,以前这个问题根本不在我的考虑范内,因为我们在使用Camera的时候都会在Activity被销毁或者暂停时释放Camera,这个时候无论闪光灯是什么状态,都会随着Camera的释放而关闭,直到我遇见了特殊机型,我的世界观发生了变化。
这货如果设置了闪光灯常亮,即使释放了Camera闪光灯依旧稳稳地亮着,而且由于Camera被释放掉了,你再也没办法关闭闪光灯了,关闭App、卸载App,算了,你还是扣电池关机吧。
所以如果你的程序中频繁地切换各种闪光灯模式,那么在释放Camera前最好先把闪光灯模式设置为Parameters.FLASH_MODE_OFF吧,不然我们还能怎么办??
加入腾讯优测官方群 214483489 与大咖们分享技术与时讯!

腾讯优测 李忠丞
__

腾讯优测是专业的移动云测试平台,为应用、游戏、H5混合应用的研发团队提供产品质量检测与问题解决服务。不仅在线上平台提供自动化兼容性测试、云手机远程租用与调试、漏洞分析、自动化测试工具Xtest等多种质量检测工具,更为VIP客户配备了专家团队提供定制化综合测试解决方案。

相关文章:

  • 全面总结sizeof的用法(定义、语法、指针变量、数组、结构体、类、联合体、位域位段)...
  • 文档转换拾遗
  • jfinal框架知识
  • EL表达式详解
  • 1065. A+B and C (64bit) (20)
  • 关于oracle数据库高版本向低版本迁移的解决方法
  • linux head-common.s分析(转)
  • 使opensuse界面不显示中文
  • echo
  • python学习笔记(六)之集合1
  • 转java中静态方法和非静态方法的存储
  • 五周第二次课(11月14日) 7.6 yum更换国内源 7.7 yum下载rpm包 7.8/7.9 源码包安装...
  • Android样式的开发:Style篇
  • npm-folders
  • Android怎么使用字体图标 自定义FontTextView字体图标控件-- 使用方法
  • 230. Kth Smallest Element in a BST
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • gf框架之分页模块(五) - 自定义分页
  • HTTP中的ETag在移动客户端的应用
  • Invalidate和postInvalidate的区别
  • 从PHP迁移至Golang - 基础篇
  • 大数据与云计算学习:数据分析(二)
  • 数据可视化之 Sankey 桑基图的实现
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 【云吞铺子】性能抖动剖析(二)
  • Java性能优化之JVM GC(垃圾回收机制)
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​你们这样子,耽误我的工作进度怎么办?
  • ![CDATA[ ]] 是什么东东
  • #pragam once 和 #ifndef 预编译头
  • $.ajax中的eval及dataType
  • (02)Hive SQL编译成MapReduce任务的过程
  • (1)虚拟机的安装与使用,linux系统安装
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (NSDate) 时间 (time )比较
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (转)shell调试方法
  • (转)winform之ListView
  • (转)程序员疫苗:代码注入
  • . NET自动找可写目录
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .bat批处理(一):@echo off
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .net core Swagger 过滤部分Api
  • .Net Web项目创建比较不错的参考文章
  • .NET/C# 的字符串暂存池
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .NET连接数据库方式
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • .pub是什么文件_Rust 模块和文件 - 「译」
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • [1127]图形打印 sdutOJ