Android碎片化问题小结——关于闪光灯的那些事儿

  • 格式:docx
  • 大小:17.14 KB
  • 文档页数:4

Android碎片化问题小结——关于闪光灯的那些事儿
腾讯优测李忠丞
这里我要说的不是闪光灯的硬件特征,也不是说底层驱动的原理,我只是跟大家聊一聊在项目中遇到的一些关于闪光灯的让人挠头的几个问题,也许你也曾遇见过,那我们一起来回味;如果你没遇见过,那我的这篇文章会让你少走一点弯路。

一、判断手机是否有闪光灯
按照常理,我们在使用闪光灯之前需要先判断手机是否有闪光灯,我们常用的判断闪光灯的方法应该有以下两种:
方法一:
if(mCamera.getParameters().getSupportedFlashModes() !=null){
//有闪光灯
}else{
//无闪光灯

方法二:
if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLAS H)) {
//有闪光灯
} else {
//没有闪光灯
}
根据腾讯优测数据库中的数据显示,在热门机型中:
使用方法一会有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%的手机在设置闪光灯为Par ameters.FLASH_MODE_TORCH后拍照的照片信息中会返回“未使用闪光灯”的标识。

你可以尝试在拍照的时候自己去写入这个信息,但是成功率不是很高。

现象四:常亮状态与其他状态间的切换
前提条件是我们设置闪光灯为常亮,并且闪光灯成功常亮,此时我们在设置闪光灯模式为P arameters.FLASH_MODE_AUTO后闪光灯依然常亮,这样的机型约占热门机型的12%,遇到这种情况我们需要先设置闪光灯模式为Parameters.FLASH_MODE_OFF关闭闪光灯后再设置其他模式。

PS:有点小问题是有极个别手机设置闪光灯为常亮后即使设置Parameters.FLASH_MODE_OFF 也无法关闭闪光灯,但这种现象极其罕见,只占0.5%甚至更少,我们可以忽略不计,总不能每次切换都险释放Camera吧。

三、关闭闪光灯
既然开了,我们就要负责关。

说实话,以前这个问题根本不在我的考虑范内,因为我们在使用Camera的时候都会在Activity被销毁或者暂停时释放Camera,这个时候无论闪光灯是什么状态,都会随着Camera的释放而关闭,直到我遇见了特殊机型,我的世界观发生了变化,这货如果设置了闪光灯常亮,即使释放了Camera闪光灯依旧稳稳地亮着,而且由于Ca mera被释放掉了,你再也没办法关闭闪光灯了,关闭App、卸载App,算了,你还是扣电池关机吧。

所以如果你的程序中频繁地切换各种闪光灯模式,那么在释放Camera前最好先把闪光灯模式设置为Parameters.FLASH_MODE_OFF吧,不然我们还能怎么办??。