解决虹软人脸识别打开摄像头黑屏的BUG

前言

今天一天都在下雨
仿佛和我心情对照 早上对接虹软的demo 跑的很顺利
结果下午在拉到自己的项目的时候 出现了问题 不管我怎么调试 都不能解决打开摄像头黑屏的问题

一直研究到现在20:00终于解决了问题 此时我的心情 如拨云见日

再次记录一下解决问题的过程

过程

首先我排查权限的问题 因为我们的app在登录的时候 会弹出多个权限提示
一开始 进入虹软人脸识别获取数据的时候 没有再次 去请求权限 理由是:登录的时候 请求过了

因为出现了摄像头黑屏 我以为是权限的问题 结果又请求一遍 CAMERA

结果:没用! 解决不了问题 白白浪费我的时间

然后我就排查自己的代码 是不是哪里写错了 严格的说是不是抄错了

很多工具类我都是直接copy虹软的 我删除了一遍 重新拉 还是不行 一样打开摄像头黑屏
解决虹软人脸识别打开摄像头黑屏的BUG_第1张图片

再获取激活码的时候 我也尝试了 切换摄像头角度
因为虹软的文档中说 如果 看不到人脸 可能是角度不对造成的

结果还是不行
走到这里我已经快崩溃了 一直黑屏 明明有2个摄像头 但没有成像

最后

最后我把问题定位在TextureView这个组件上

组件解读
TextureView

TextureView并没有创建一个单独的Surface用来绘制,这使得它可以像一般的View一样执行一些变换操作,设置透明度等。另外,Textureview必须在硬件加速开启的窗口中。
TextureView的使用非常简单,你唯一要做的就是获取用于渲染内容的SurfaceTexture。

最后我把它换成它的兄弟SurfaceView
问题迎刃而解

SurfaceView

SurfaceView。SurfaceView的工作方式是创建一个置于应用窗口之后的新窗口。这种方式的效率非常高,因为SurfaceView窗口刷新的时候不需要重绘应用程序的窗口(android普通窗口的视图绘制机制是一层一层的,任何一个子元素或者是局部的刷新都会导致整个视图结构全部重绘一次,因此效率非常低下,不过满足普通应用界面的需求还是绰绰有余),但是SurfaceView也有一些非常不便的限制。
因为SurfaceView的内容不在应用窗口上,所以不能使用变换(平移、缩放、旋转等)。也难以放在ListView或者ScrollView中,不能使用UI控件的一些特性比如View.setAlpha()。
为了解决这个问题 Android 4.0中引入了TextureView。



    

    

总结

解决bug真的太痛苦了 解决完后 又那么的开心
这就像人生一样 先苦后甜

你可能感兴趣的:(BUG处理总结,定位,android,bug,人脸识别)