最近遇到了一个奇葩问题 ,自定义相机  ,拍照一直没有问题  三百年没有动过的代码  ,在项目上uat的时候拍照黑屏了  ,先上代码让大家看一下  避免出现这个错误

if (mCamera == null) {mCamera = getCamera(mCameraId);

    if (mHolder != null) {
    startPreview(mCamera, mHolder);
    }}

在onResume方法中这么写的一直没有问题  但是今天打开相机就是黑屏  ,后来发现了  在onResume方法中给开启相机会有一定的延迟 ,具体为什么我也不知道 ,因为我切换前后摄像头是可以预览的  所以我坚信了我预览的代码没有问题

然而,为了解决这个问题  我把开启相机的代码放在了SurfaceHolder的surfaceCreated方法中

 public void surfaceCreated(SurfaceHolder holder) {if (mCamera == null) {mCamera = getCamera(mCameraId);

        }if (mCamera == null) {ToastUtil.makeText("请检查相机相关权限是否打开!");

          }else {
                startPreview(mCamera, holder);}}

我以为这样就没有问题了  还是自己太年轻啊正常的拍照是没有问题了 但是 锁屏和跳转到别的界面再回来的时候 又是黑屏了 因为 我在onPause方法中把相机设为null 在网上查了好多资料 有的说是设置预览大小的时候  获取宽高为奇数,我的不是这种问题 ,因为如果我的是这样的问题就不会出现有预览的界面 所以我Pass了 网上还有的人说在onResume方法中sleep一下 我尝试延时时间缩短到50ms已经可以完全正常预览了,而且视觉上几乎感觉不到延迟(zxing的二维码扫描预览视觉上也会有略微延迟),而如果改成10ms就不行了。差不多这个时间应该是需要用来调用底层so档的最短时间。所以最终解决办法还需要将上述OnResume()中的开启相机方法改成如下

if (isONe!=1){if (mCamera == null) {mCamera = getCamera(mCameraId);

        if (mHolder != null) {new Thread(){@Override
                public void run() {super.run();
                    try{Thread.sleep(50);
                    }catch (Exception e){}startPreview(mCamera, mHolder);
                }}.start();

        }}
}

嘻嘻 代码修改成这样 拍照已经是可以了 但是你以为这样就完成了 那就错了  你们太小看我家测试的能力了  。。。。。其实这时候我心中一万只曹尼玛经过  但是没有办法  我只能一个测试会改变一个程序员的代码习惯  ,因为我被我家的测试改变了  好了废话不多说了  我们自测只是小心翼翼的点击操作  好像自己的孩子一样 怕点坏了  但是我家测试就把你写的程序当作是他的天敌 使劲的操作  不点蹦就誓不罢休  唉 天有不测风云啊  android 这么多机型 总有一款机型会会出现问题

下面我就说一下这个特殊机型 魅族 ,当手机的拍照权限拒绝的时候  魅族获取的Camera不为null   那么这就尴尬了  因为我判断逻辑就是判断Camera是否为null 上代码

   if (mCamera == null) {ToastUtil.makeText("请检查相机相关权限是否打开!");

          }else {
            startPreview(mCamera, holder);}

因为mCamera不为null 所以走进了开启相机 但是相机权限的关闭了 爆出了异常  所以 我在判断权限的位置多加了代码    代码如下

 if (mCamera == null) {ToastUtil.makeText("请检查相机相关权限是否打开!");

        }else {try{// setParameters 是针对魅族MX5。MX5通过Camera.open()拿到的Camera对象不为null

                Camera.Parameters mParameters = mCamera.getParameters();

                mCamera.setParameters(mParameters);
                startPreview(mCamera, holder);
            }catch(Exception e) {ToastUtil.makeText("请检查相机相关权限是否打开!");

            }}

这样就能满足条件了  嘻嘻完美解决了  之前还遇到了特别的问题  小米手机拍出的照片比一般的手机排除的照片要大  因为之前做视频拍摄的时候  视频要做压缩  所以在做视频配置的时候 小米手机要做特别的处理

第一写这么就的文章  写的不好  大家多多包涵

Android 自定义相机黑屏相关推荐

  1. Android系统(121)---Android启动页黑屏及最优解决方案

    Android启动页黑屏及最优解决方案 前言 相信做过Android的朋友都知道,当一个APP启动时,界面会首先展示一个白屏或者黑屏,然后再进入欢迎页,稍作停留最后进入APP主页.那么这个黑屏或者白屏 ...

  2. Android 系统(119)---Android启动页黑屏及最优解决方案

    Android启动页黑屏及最优解决方案 前言 相信做过Android的朋友都知道,当一个APP启动时,界面会首先展示一个白屏或者黑屏,然后再进入欢迎页,稍作停留最后进入APP主页.那么这个黑屏或者白屏 ...

  3. android最优化启动画面,Android启动页黑屏及最优解决方案

    原标题:Android启动页黑屏及最优解决方案 作者:拉丁吴 链接:https://juejin.im/post/58ad90518ac2472a2ad9b684 前言 相信做过Android的朋友都 ...

  4. Android 自定义相机Demo 入门学习

    Android 自定义相机Demo 本文是参考网上一些自定义相机示例,再结合自己对相机的功能需求写的,基本上包含了很多基本功能,比如相机对焦.闪光灯,以及在手机预览界面上绘制自己想要绘制的图案. 话不 ...

  5. Android自定义相机拍照、图片裁剪的实现

    原文:Android自定义相机拍照.图片裁剪的实现 最近项目里面又要加一个拍照搜题的功能,也就是用户对着不会做的题目拍一张照片,将照片的文字使用ocr识别出来,再调用题库搜索接口搜索出来展示给用户,类 ...

  6. Android自定义相机,切换前后摄像头,照相机拍照

    Android自定义相机,简单实现切换前后摄像头,照相机拍照 Ctrl +C  Ctrl+V 可以直接 run 起来,注释比较详细;源码下载 <?xml version="1.0&qu ...

  7. android进入应用黑屏原因以及解决方案

    android 界面进入黑屏解决方案: .1 原因 加载onCreate 方法 执行方法加载数据耗时,需要跑完onCreate和onResume才会显示界面.2 闪黑屏的原因主要是我们启动Activi ...

  8. android 实现自动拍照,Android自定义相机实现定时拍照功能

    这篇博客为大家介绍Android自定义相机,并且实现倒计时拍照功能. 首先自定义拍照会用到SurfaceView控件显示照片的预览区域,以下是布局文件: activity_main.xml andro ...

  9. android 自定义相机源码,Android 自定义相机及分析源码

    Android 自定义相机及分析源码 使用Android 系统相机的方法: 要想让应用有相机的action,咱们就必须在清单文件中做一些声明,好让系统知道,如下 action的作用就是声明action ...

最新文章

  1. 《构建高性能web站点》随笔 无处不在的性能问题
  2. 关于ORA-06508 , ORA-04068异常的详细说明
  3. c语言从串口获取数据,如何通过串口来读写数据,请教达人
  4. PyCharm简单使用介绍及注意事项
  5. 2021牛客暑期多校训练营1 G-Game of Swapping Numbers(最优解转化+贪心)
  6. 安装redis并开启_如何安装Redis,以及对Redis配置文件的更改和测试
  7. vue实现数字“滚动式增加”效果 【插件化封装】
  8. 模式识别中的特征向量和矩阵的特征向量有什么关系
  9. uboot向linux传递输出任何log信息的方法
  10. 设置PDF文件默认缩放比例
  11. nginx反向代理docker registry报”blob upload unknown解决办法
  12. kjb文件 解析_微信安装包解析异常
  13. 2.2CP分解CP-RALS算法推导python实现
  14. 因IP被列入黑名单导致U-Mail被退信的处理方法
  15. 使用python打印九九乘法表
  16. 正交投影与弱透视投影
  17. 时间中常用时区的英文缩写对照中文释义
  18. 淘宝的互动项目,为什么总会刷爆你的好友圈?
  19. 有苦有乐的算法 --- 一个数组中,有两种数出现了奇数次,其余数都出现了偶数次,找到这两种数
  20. 简易计算机led数码管单片机课设,单片机课程设计报告--简易计时器——LED?数码管显示接口技术应用.docx...

热门文章

  1. 例题5-3 安迪的第一个字典 UVa10815
  2. 传统会计和计算机会计的职能,论会计信息化对传统财务会计职能的影响
  3. linux使用certbot,如何自动续期~
  4. 最新PyCharm基本使用(3)------编码(Code)、重构(Refactor)
  5. 银行数字化转型导师坚鹏:浙江浙商金控公司培训圆满结束
  6. 推荐几个网站 - (可视化、博客、社区、学习网站)
  7. Excle常用快捷键
  8. RabbitMQ中交换机的几种模式
  9. 好用在线html编辑器,求一款好用的html在线编辑器
  10. python牛顿法算立方根_立方根求解(牛顿迭代法)