腾讯优测是专业的自动化测试平台,提供全面兼容适配测试,远程真机租用等多维度的测试服务!
作为一名“艰苦卓绝”的软件工程师,我在开发路上经常被各种奇葩情况虐的体无完肤。。。今天就想与大家分享一个我在适配过程中遇到的特殊状况,希望工程师们多加注意。
爱护程序猿,人人有责。阿门。。。

闲话不多说,步入正题。相信大家都用过 android.hardware.Camera,那就一定接触过Camera的 setDisplayOrientation方法。该方法是用来设置显示Camera在预览状态下的顺时针旋转度,关于这个修正角度的计算,官方文档有个范例:


在这个例子中,CameraInfo非常重要,最终的角度计算就是根据CameraInfo中orientation 值得到的。所以,如果这个值不准确的话,我们的角度就有可能出现错误。
我在做某款产品的适配时遇到一个奇怪的现象,在使用VIVO V1手机打开该产品时,首次打开扫描二维码功能,预览画面的角度正常,但是退出再进来的时候角度就偏转了90度。经过反复测试后,我找到了一个规律:只有重启手机后,第一次进入该页面时画面的角度才是正常的。
通过一系列的log调查,我发现当第一次应用此款手机获取CameraInfo的orientation值是90。而当我执行了mCamera = Camera.open();之后再获取CameraInfo的orientation值时就是0,而且以后获取的都是0。除非我们重启手机,否则都没有变化。
那么有人就会说,我们可以第一次获取orientation后将值保存到本地,以后读取本地数据就可以了。刚开始我也有这样的想法,但情况远非如此简单。当我重启手机后打开系统的照相机功能,之后再获取CameraInfo的orientation结果依旧是0。
也就是说,无论是这款手机上的哪个应用,只要执行了一次Camera.open()之后,其他所有程序中获取CameraInfo的orientation都是0,所以这个解决方案是不可行的。
但问题在于,虽然出现了上述情况,但手机自带的相机却能很好的使用。于是我反编译了VIVO V1的系统相机,果然,系统相机根本没有使用CameraInfo的orientation来计算修正角度,他的角度计算方法如下:


mLastOrientation就是他最后用来设置修正角度的值:


access$2802的small代码是这样的:


roundOrientation方法:


所以,针对VIVO V1,我们需要通过手机屏幕的旋转角度来计算Camera成像的修正角度。目前还没有足够的测试来证明这个方法是否通用,所以建议大家在使用时做好机型开关判断。

腾讯优测优分享 | Android适配中的一些特殊情况小结的更多相关文章

  1. 腾讯优测-优社区干货精选 |  那些年,我们在Android机型适配上遇到的坑之Camera拍照时快门咔嚓声

    文/腾讯优测研发工程师 吴宇焕 优测小优有话说: android机型适配的坑自然是不少,不想掉坑快来优测优社区~ 现在Android手机一般都会带有照相功能,有很多朋友就发现手机照相时快门声音很响,想 ...

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

    文/腾讯公司 陈江峰 优测小优有话说: android开发的坑自然是不少,不想掉坑快来优测优社区~ 6.Android APP开发中其它需要提醒的问题 android4.4在UI线程无法进行网络操作. ...

  3. 优测优社区干货精选|老司机乱谈编辑器之神——vim

    文 / 腾讯 吴双 前言 优测小优 有话说: 腾讯优测只有应用测试大神?不不不,我们还有各种研发大牛! *** vim 是一种信仰,我自从2004年有了这个信仰,已经12个年头了.本文介绍了学习vim ...

  4. 【腾讯优测干货分享】Android 相机预览方向及其适配探索

    本文来自于腾讯bugly开发者社区,未经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/583ba1df25d735cd2797004d 由于Android系统的开放策略 ...

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

    腾讯优测是专业的android自动化测试平台,拥有上千款真机,彻底解决android碎片化问题! 这里我要说的不是闪光灯的硬件特征,也不是说底层驱动的原理,我只是跟大家聊一聊在项目中遇到的一些关于闪光 ...

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

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

  7. 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?

    腾讯优测是专业的移动自动化测试平台,提供多维度的自动化测试服务,让测试更简单! 近期有报道称,澳大利亚悉尼市新某大学的一名男生在课堂上看电影,不料耳机没有插好,变成了现场直播... 如果你认为耳机没插 ...

  8. 腾讯优测优分享 | Android性能测试工具化实现

    腾讯优测专业的移动云测试平台,自动化测试提供性能测试数据,云真机实时输出性能数据,让测试更简单! 1.Android性能测试介绍 提到Android性能测试,我们总免不了俗地要首先介绍下Android ...

  9. 【腾讯优测干货分享】Android内存泄漏的简单检查与分析方法

    本文来自于Dev Club 开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d14047603a5bf1242ad01b 导语 内存泄漏问题大约是An ...

随机推荐

  1. Java集合类学习笔记(Set集合)

    Set集合不允许包含相同的元素,如果试图把两个相同的元素加入同一个Set集合中,则添加操作失败,add()方法返回false,且新元素不会被加入. HashSet类的特点: 不能保证元素的排列顺序,顺 ...

  2. IOS Core Animation Advanced Techniques的学习笔记(四)

    第五章:Transforms   Affine Transforms   CGAffineTransform是二维的     Creating a CGAffineTransform   主要有三种变 ...

  3. AnyCAD.NET C#开发CAD软件实践(一)

    免费的AnyCAD.NET发布了!俺喜欢的C#有了大展前途的机会了. 打算用这个框架搭建一套实用的CAD系统,目标是能买出去10套以上. 先看看AnyCAD.NET的自我介绍. http://www. ...

  4. R 语言机器学习同步推进~

    教材就是传说中的机器学习和R语言--中文版,大家可以去图书馆借来看看~~~,例子都是来自书上的 首先介绍一下KNN算法,KNN还好吧,说白了就是一个算距离的公式然后以统计的方式呈现出来,以二维平面为例 ...

  5. <![CDATA[]]>作用

    <![CDATA[]]>的作用是让XML解析器将标签中的字符串当作普通文本对待,以防止某些字符串对XML格式造成破坏.

  6. SSH整合开发的web.xml配置

    <?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" ...

  7. 10款html5开发工具,实用+好用

    利用HTML5工具不仅可以帮助设计师和开发者创建更具吸引力的网站,还能增加网站的可用性和可访问性.本文收集了10款HTML5开发工具让你在网页中搭建特效.动画.视频.音频等诸多功能,为你节省更多开发时 ...

  8. JDK8+Dubbo2.5.2实践

    几年前就听说过Dubbo的大名,今天由于工作需要,研究一下. 从网上找了一篇文章,非常靠谱,并且提供了简单的示例代码,基本上可以跑起来. 文章地址: http://www.cnblogs.com/Ja ...

  9. ie7、ie8 下Table 中 td 列固定宽度 未按样式设定显示 曲线解决方案

    <!doctype html> <html> <head> <meta charset='utf-8'> <style> .title {b ...

  10. RankLib参数翻译

    写在前面,metric2t指标详解: NDCG(Normalized discounted cumulative gain)即DCG/IDCGCG(cumulative gain)DCG(Discou ...