Android调用相机预览黑屏app passed NULL surface解决
由于项目需求,要实现一个调用相机拍照然后将矩形框中的部分切割出来的功能,于是在网上找了 一个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解决相关推荐
- Android Camera摄像头预览黑屏原因(二)
在Android系统中,操作Camera摄像头非常容易出问题,特别是Camera.open()的时候.就算open正常,也可能会出现预览界面黑屏的情况. 出现黑屏的时候,如果没有明显的报错,很大概率是 ...
- [FAQ11232][MT6592][Camera Drv]开机首次视频通话进入前摄预览黑屏
[DESCRIPTION] (1)开机首次视频通话进入前摄预览黑屏 (2)92平台前摄无法连接CCT调试工具 [ROOT CAUSE] 开tsf功能,但是没有提供tsf参数. [SOLUTION] ...
- Android Camera相机预览,拍照 ,横屏竖屏的处理
功能分别是: 1.竖屏的前置,后置显示 加 拍照 2.横屏的前置,后置显示 加 拍照 整个项目的代码贴出来了,里面加了有备注,不理解的也可以去参考官网点击跳转到官网 首先选择前置后置布局效果如下 布局 ...
- android 圆形相机预览拍照_Android多种方式实现相机圆形预览
最终效果图如下: 一.为预览控件设置圆角 public RoundTextureView(Context context, AttributeSet attrs) { super(context, a ...
- android 圆形相机预览拍照_Android多种方式实现相机圆形预览的示例代码
效果图如下: 一.为预览控件设置圆角 public RoundTextureView(Context context, AttributeSet attrs) { super(context, att ...
- Android Camera2相机预览画面放大缩小(数码变焦DigitalZoom)功能实现
一.前言 Android自定义相机开发中,常常会有通过手势放大或缩小相机预览画面的需求,即数码变焦DigitalZoom. 二.接口说明 1. 获取最大的放大倍数 float maxZoom = mC ...
- Android Camera2 相机预览、获取数据
Camera2简要说明 在Google 推出Android 5.0的时候, Android Camera API 版本升级到了API2(android.hardware.camera2),大幅提高了A ...
- android自定义相机预览尺寸,相机在Android中,如何获得最佳尺寸,预览尺寸,图片尺寸,视图尺寸,图像扭曲...
混合来自OpenGL和 Android相机的视图时图像失真,以便在使用takepicture方法时获取两者的图像.我查了一下,发现相机图片设置为640X480,openGL视图和相机预览都设置为128 ...
- android+相机画面旋转,Android:相机预览的屏幕方向/旋转
我已经创建了一个相机应用程序,我想让我的应用程序在所有4个可能的方向转换,并相应地更新相机预览.因为我已经使用我从以下复制的以下方法: Android – Camera preview is side ...
最新文章
- R语言使用pROC包绘制ROC曲线实战:roc函数计算AUC值、plot.roc函数绘制ROC曲线、添加置信区间、为回归模型中的每个因子绘制ROC曲线并在同一个图中显示出来
- 截屏悬浮软件_【第295期】FV悬浮球,一款全能悬浮球
- DCMTK:测试dcmseg的DcmSegUtils功能
- DOM-8 【兼容】冒泡捕获流、事件与事件源对象、事件委托
- Android 集成微信支付详解
- 中科大 计算机网络15 DNS域名解析系统
- 中国移动互联网流量半年度分析报告
- 【程序设计】流程图的规范和绘制
- 【Flink】Flink 清理过期 Checkpoint 目录的正确姿势
- MySQL知识点查阅
- html让文本框左剧中对齐_HTML 样式 CSS
- mysql 导出过长的数字列时变科学计数法问题解决办法
- libusb-win32学习笔记(一)
- 关于Decision in process状态时间变化的解释
- background相关属性
- 洛谷P3958 奶酪
- springboot实现数据库读写分离的一款框架
- java 命令参数详解
- 江南鹤微信公众号文章采集器,开发完成了!以后再也不发愁采集微信公众号文章了!
- Excel进度条设置百分比解决
热门文章
- Far_planner初次探索全过程(attempt search)
- 数据库DB与数据仓库DW区别和联系
- c语言输入f1到f11,同花顺功能键f1到f11,谁能告诉我F1到F10各键的功能?
- 1.二分排序——抓老鼠法
- 2015数据库年度盘点
- 抓取某一个网站整站的记录
- 惠鑫云安全稳定为什么说澳元是高息钱银?高息钱银有哪些
- Codeforces 711B- Chris and Magic Square
- 上海交通大学计算机学院导师介绍,上海交通大学计算机科学与工程系导师教师师资介绍简介-张同珍副教授...
- I2C调试遇到的问题以及解决办法---“busy死锁状态”以及“从设备地址无应答”问题