在 monkey test 测试中出现了一例 RuntimeException ,即 setParameters failed.

LOG显示为:
09-01 18:47:17.348 15656 15675 E AndroidRuntime: FATAL EXCEPTION: Camera Handler Thread
09-01 18:47:17.348 15656 15675 E AndroidRuntime: Process: com.android.camera, PID: 15656
09-01 18:47:17.348 15656 15675 E AndroidRuntime: java.lang.RuntimeException: setParameters failed
09-01 18:47:17.348 15656 15675 E AndroidRuntime:      at android.hardware.Camera.native_setParameters(Native Method)
09-01 18:47:17.348 15656 15675 E AndroidRuntime:      at android.hardware.Camera.setParameters(Camera.java:1760)
09-01 18:47:17.348 15656 15675 E AndroidRuntime:      at com.android.camera.CameraManager$CameraHandler.handleMessage(CameraManager.java:260)
09-01 18:47:17.348 15656 15675 E AndroidRuntime:      at android.os.Handler.dispatchMessage(Handler.java:102)
09-01 18:47:17.348 15656 15675 E AndroidRuntime:      at android.os.Looper.loop(Looper.java:136)
09-01 18:47:17.348 15656 15675 E AndroidRuntime:      at android.os.HandlerThread.run(HandlerThread.java:61)

最终查到:
09-01 18:47:17.338   235  4175 E QCameraParameters: int32_t qcamera::QCameraParameters::setZoom(const qcamera::QCameraParameters&): invalid value -1 out of (0, 60)

setZoom 的值存在异常。

解决方案就是在 setZoom 的时候,先检查 mZoomValue 是否合法,如果不合法,则 return 掉。

后面在网上查了一下 camera setParameters failed 同类的错误,大部分都是因为 previewSize 或者 pictureSize 设置不合理(即底层不支持)造成的。
 
最终有网友给出的方法就是找到一个支持的尺寸再设下去。例如:

 try {
int PreviewWidth = 0;
int PreviewHeight = 0;
WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);//获取窗口的管理器
Display display = wm.getDefaultDisplay();//获得窗口里面的屏幕
Camera.Parameters parameters = mCamera.getParameters();
// 选择合适的预览尺寸
List<Camera.Size> sizeList = parameters.getSupportedPreviewSizes(); // 如果sizeList只有一个我们也没有必要做什么了,因为就他一个别无选择
if (sizeList.size() > 1) {
Iterator<Camera.Size> itor = sizeList.iterator();
while (itor.hasNext()) {
Camera.Size cur = itor.next();
if (cur.width >= PreviewWidth
&& cur.height >= PreviewHeight) {
PreviewWidth = cur.width;
PreviewHeight = cur.height;
break;
}
}
}
parameters.setPreviewSize(PreviewWidth, PreviewHeight); //获得摄像区域的大小
parameters.setPreviewFrameRate(3);//每秒3帧 每秒从摄像头里面获得3个画面
parameters.setPictureFormat(PixelFormat.JPEG);//设置照片输出的格式
parameters.set("jpeg-quality", 85);//设置照片质量
parameters.setPictureSize(PreviewWidth, PreviewHeight);//设置拍出来的屏幕大小
//
mCamera.setParameters(parameters);//把上面的设置 赋给摄像头
mCamera.setPreviewDisplay(mySurfaceView.getHolder());//把摄像头获得画面显示在SurfaceView控件里面
mCamera.startPreview();//开始预览
mPreviewRunning = true;
} catch (IOException e) {
Log.e(TAG, e.toString());
}
当然,这也不失为一种好的方法。我们碰到这类问题时,也可以将支持的 previewSize 或者 pictureSize 以log的形式打印出来看:

 //List<Size> pictureSizes = mCameraDevice.getCamera().getParameters().getSupportedPictureSizes();
List<Size> pictureSizes = mParameters.getSupportedPictureSizes();
int length = pictureSizes.size();
for (int i = 0; i < length; i++) {
LOGD("SupportedPictureSizes : " + pictureSizes.get(i).width + "x" + pictureSizes.get(i).height);
} //List<Size> previewSizes = mCameraDevice.getCamera().getParameters().getSupportedPreviewSizes();
List<Size> previewSizes = mParameters.getSupportedPreviewSizes();
length = previewSizes.size();
for (int i = 0; i < length; i++) {
LOGD("SupportedPreviewSizes : " + previewSizes.get(i).width + "x" + previewSizes.get(i).height);
}
总结:
 setParameters failed 错误肯定是某一个参数设置错了导致的。仔细查看该错误附近的log,总能找到导致问题发生的原凶!
 
参考:
http://stackoverflow.com/questions/3890381/camera-setparameters-failed-in-android
http://www.eoeandroid.com/thread-28137-2-1.html
http://bbs.csdn.net/topics/370195903?page=1#post-396249333
 
转自: http://blog.csdn.net/fulinwsuafcie/article/details/39348869

android camera setParameters failed 类问题分析总结的更多相关文章

  1. Android调用camera错误setParameters failed深层解析

    1. Camera Camera是Android framework里面支持的,同意你拍照和拍摄视频的设备,那么,在使用camera开发中总是会遇到一些问题,比例如以下面这样子的: E/Android ...

  2. 解决Android调用相机拍照,要报“打开相机失败”查看debug日志显示“setParameters failed”的问题

    使用CameraLibrary项目,在部分手机或平板上不能正常使用,要报“打开相机失败”查看debug日志显示“setParameters failed”. 找到CameraView.java中的se ...

  3. android Camera相机类

    Camera相机类相关的几个流程方法 Camera.open(cameraId) 打开相机 camera.setDisplayOrientation(0) 设置相机水平方向 mCamera.setPr ...

  4. Android Camera开发:周期性循环自动聚焦auto focus挂掉原因分析(preview is not enabled)

    参考:Android Camera开发:扫描二维码,周期性循环自动聚焦auto focus挂掉原因分析(preview is not enabled) 最近做Android人脸识别时,camera在自 ...

  5. android Camera模块分析

    Android Camera Module Architecture and Bottom layer communication mechanism              ----------- ...

  6. Android Camera 通过V4L2与kernel driver的完整交互过程

    http://blog.chinaunix.net/uid-26215986-id-3552456.html 原文地址:Android Camera 通过V4L2与kernel driver的完整交互 ...

  7. Android Camera 相机程序编写

    Android Camera 相机程序编写 要自己写一个相机应用直接使用相机硬件,首先应用需要一个权限设置,在AndroidManifest.xml中加上使用设备相机的权限: <uses-per ...

  8. Android SoundPool 的使用以及原理分析

    好吧,我们今天来聊聊SoundPool这东西. 据说这个东西是冰激凌(Android4.0)里才引入的一个新东西.按照官方的意思大多数情况下是给游戏开发用的,比如一个游戏10关,它能在游戏开始前一次加 ...

  9. qcom Android Camera【转】

    本文转载自:http://blog.csdn.net/Wilsonboliu/article/details/54949196 1.总体架构 Android Camera 框架从整体上看是一个 cli ...

随机推荐

  1. EL表达式概述

    E L(Expression Language) 目的:为了使JSP写起来更加简单.表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法. ...

  2. 【读书笔记】iOS-查看一个软件ipa包的内容

    一,打开itunes----->我的iPhone应用程序. 二,右键点击app---->在Finder中显示---->出现下图所示界面. 三,将上图中的ipa包拷贝到桌面,如下图所示 ...

  3. Web应用程序系统的多用户权限控制设计及实现-项目架构【3】

    本章主要讲述Web权限管理系统的项目架构,及开发中需要的基本类和相关的CSS,JS文件. 1.1系统结构 本系统搭建开发工具为Visual Studio 2012,采用ASP.NET MVC 4.0技 ...

  4. .NET下的并行开发(案例代码)

    以下主要是通过一个报表处理程序来说明并行开发的方式.对于数据冲突和共享,可以通过对象数组解决.设计到并行的核心代码已用红色标出.在并行程序的处理上,需要把原来串行的子公司变成一个一个类的对象,让所有的 ...

  5. object-c中的类目,延展,协议

    协议 协议只有方法的声明(类似于其他编程语言的接口)   协议相当于大家都所遵循的 关键字 @protocol 协议名 <所遵循的协议> 默认NSObject   @end     @pr ...

  6. iOS 开发技巧-制作环形进度条

    有几篇博客写到了怎么实现环形进度条,大多是使用Core Graph来实现,实现比较麻烦且效率略低,只是一个小小的进度条而已,我们当然是用最简单而且效率高的方式来实现. 先看一下这篇博客,博客地址:ht ...

  7. 如何避免Activity 被杀死

    我们都知道,在android系统中,内存不足的时候,系统是可以杀死任何暂停.停止或者销毁的Activity.这就意味着基本上没有在前台的Activity都会面临被关闭的可能. Android系统之所以 ...

  8. 既生瑜何生亮?ASP.NET MVC VS ASP.NET Web API

    Asp.net MVC 与 Asp.net Web API 区别 在我们开发一些web应用时,我们一样可以在MVC Framework 中使用JsonResult 来返回JSON数据,同样也可以处理一 ...

  9. .net程序员工作两年总结

    (2015年9月) 最近换了工作,面试了很多家公司想总结下,以便以后回顾知道自己是怎么走过来的. 入行背景: 我是半路转行做软件开发的,2011年7月大学专科毕业,大学专业是:机械制造及其自动化:20 ...

  10. 【等待事件】序列等待事件总结(enq: SQ - contention、row cache lock、DFS lock handle和enq: SV - contention)

    [等待事件]序列等待事件总结(enq: SQ - contention.row cache lock.DFS lock handle和enq: SV -  contention) 1  BLOG文档结 ...