由于项目需求,要实现一个调用相机拍照然后将矩形框中的部分切割出来的功能,于是在网上找了 一个PlayCamera的demo程序。但运行的时候发现,只有第一次安装上时拍照界面能成功预览,一旦用back按键返回或者按home键回到主界面,再启动程序的时候,预览界面就变黑了。

猜测是surfaceview一旦后台就自动destroy有没有重新绘制的缘故。所以先将CameraActivity.java的OnCreate()中打开相机的方法,具体如下:

Thread openThread = new Thread(){
@Override
public void run() {
// TODO Auto-generated method stub
CameraInterface.getInstance().doOpenCamera(CameraActivity.this);
}
};
openThread.start();

挪到Onresume()中,再将原本写在了CameraSurfaceView.java的surfaceDestroyed()中关闭相机的方法,具体如下:

CameraInterface.getInstance().doStopCamera();

注释掉,挪到CameraActivity.java的onPause()中。

这样改完之后,出现了奇怪的现象。小米4和中兴努比亚手机可以完全正常预览拍照了(按back或home返回再重新打开也正常),而三星S6完全不能预览,华为荣耀6 plus则home返回可以正常预览,back之后依旧黑屏。

百思不得其解,查看log后发现无法正常预览的情况下,后台印出了这样一行log:app passed NULL surface

谷歌之,发现stackoverflow上有仁兄遇到类似的问题,即部分机型黑屏(原网址附在文章最末)。于是按照最后一位仁兄回答的办法,将开启相机的时机做一下延迟试试看(该兄说的是延迟一秒)。一试,果然成功了!!!狂喜ing……

事实上, 我尝试延时时间缩短到50ms已经可以完全正常预览了,而且视觉上几乎感觉不到延迟(zxing的二维码扫描预览视觉上也会有略微延迟),而如果改成10ms就不行了。差不多这个时间应该是需要用来调用底层so档的最短时间。所以最终解决办法还需要将上述OnResume()中的开启相机方法改成如下:

new Thread(new Runnable(){   
           public void run(){   
               try {
        Thread.sleep(50);
        } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }   
               CameraInterface.getInstance().doOpenCamera(CameraActivity.this);
           }   
        }).start();

至此,大功告成啦~

参考网页:stackoverflow.com/questions/12098298/android-camera-app-passed-null-surface

Android调用相机预览黑屏app passed NULL surface解决相关推荐

  1. Android Camera摄像头预览黑屏原因(二)

    在Android系统中,操作Camera摄像头非常容易出问题,特别是Camera.open()的时候.就算open正常,也可能会出现预览界面黑屏的情况. 出现黑屏的时候,如果没有明显的报错,很大概率是 ...

  2. [FAQ11232][MT6592][Camera Drv]开机首次视频通话进入前摄预览黑屏

    [DESCRIPTION] (1)开机首次视频通话进入前摄预览黑屏 (2)92平台前摄无法连接CCT调试工具 [ROOT CAUSE] 开tsf功能,但是没有提供tsf参数. [SOLUTION]   ...

  3. Android Camera相机预览,拍照 ,横屏竖屏的处理

    功能分别是: 1.竖屏的前置,后置显示 加 拍照 2.横屏的前置,后置显示 加 拍照 整个项目的代码贴出来了,里面加了有备注,不理解的也可以去参考官网点击跳转到官网 首先选择前置后置布局效果如下 布局 ...

  4. android 圆形相机预览拍照_Android多种方式实现相机圆形预览

    最终效果图如下: 一.为预览控件设置圆角 public RoundTextureView(Context context, AttributeSet attrs) { super(context, a ...

  5. android 圆形相机预览拍照_Android多种方式实现相机圆形预览的示例代码

    效果图如下: 一.为预览控件设置圆角 public RoundTextureView(Context context, AttributeSet attrs) { super(context, att ...

  6. Android Camera2相机预览画面放大缩小(数码变焦DigitalZoom)功能实现

    一.前言 Android自定义相机开发中,常常会有通过手势放大或缩小相机预览画面的需求,即数码变焦DigitalZoom. 二.接口说明 1. 获取最大的放大倍数 float maxZoom = mC ...

  7. Android Camera2 相机预览、获取数据

    Camera2简要说明 在Google 推出Android 5.0的时候, Android Camera API 版本升级到了API2(android.hardware.camera2),大幅提高了A ...

  8. android自定义相机预览尺寸,相机在Android中,如何获得最佳尺寸,预览尺寸,图片尺寸,视图尺寸,图像扭曲...

    混合来自OpenGL和 Android相机的视图时图像失真,以便在使用takepicture方法时获取两者的图像.我查了一下,发现相机图片设置为640X480,openGL视图和相机预览都设置为128 ...

  9. android+相机画面旋转,Android:相机预览的屏幕方向/旋转

    我已经创建了一个相机应用程序,我想让我的应用程序在所有4个可能的方向转换,并相应地更新相机预览.因为我已经使用我从以下复制的以下方法: Android – Camera preview is side ...

最新文章

  1. R语言使用pROC包绘制ROC曲线实战:roc函数计算AUC值、plot.roc函数绘制ROC曲线、添加置信区间、为回归模型中的每个因子绘制ROC曲线并在同一个图中显示出来
  2. 截屏悬浮软件_【第295期】FV悬浮球,一款全能悬浮球
  3. DCMTK:测试dcmseg的DcmSegUtils功能
  4. DOM-8 【兼容】冒泡捕获流、事件与事件源对象、事件委托
  5. Android 集成微信支付详解
  6. 中科大 计算机网络15 DNS域名解析系统
  7. 中国移动互联网流量半年度分析报告
  8. 【程序设计】流程图的规范和绘制
  9. 【Flink】Flink 清理过期 Checkpoint 目录的正确姿势
  10. MySQL知识点查阅
  11. html让文本框左剧中对齐_HTML 样式 CSS
  12. mysql 导出过长的数字列时变科学计数法问题解决办法
  13. libusb-win32学习笔记(一)
  14. 关于Decision in process状态时间变化的解释
  15. background相关属性
  16. 洛谷P3958 奶酪
  17. springboot实现数据库读写分离的一款框架
  18. java 命令参数详解
  19. 江南鹤微信公众号文章采集器,开发完成了!以后再也不发愁采集微信公众号文章了!
  20. Excel进度条设置百分比解决

热门文章

  1. Far_planner初次探索全过程(attempt search)
  2. 数据库DB与数据仓库DW区别和联系
  3. c语言输入f1到f11,同花顺功能键f1到f11,谁能告诉我F1到F10各键的功能?
  4. 1.二分排序——抓老鼠法
  5. 2015数据库年度盘点
  6. 抓取某一个网站整站的记录
  7. 惠鑫云安全稳定为什么说澳元是高息钱银?高息钱银有哪些
  8. Codeforces 711B- Chris and Magic Square
  9. 上海交通大学计算机学院导师介绍,上海交通大学计算机科学与工程系导师教师师资介绍简介-张同珍副教授...
  10. I2C调试遇到的问题以及解决办法---“busy死锁状态”以及“从设备地址无应答”问题