`

android Camera 拍照的两个问题

 
阅读更多
2010.11.16———android Camera 拍照的两个问题

1、setParameters failed 异常信息如下

Java代码收藏代码
  1. 11-1611:21:33.902:WARN/System.err(27218):java.lang.RuntimeException:setParametersfailed
  2. 11-1611:21:33.902:WARN/System.err(27218):atandroid.hardware.Camera.native_setParameters(NativeMethod)
  3. ...
  4. ...


原因在于

Java代码收藏代码
  1. parameters.setPreviewSize()//设置预览照片的大小
  2. parameters.setPictureSize()//设置照片的大小


这两个属性 如果这两个属性设置的和真实手机的不一样时,就会报上面的错误 很是郁闷

最好的方法 就是 不设置这两项


2、java.lang.NullPointerException

Java代码收藏代码
  1. 11-1613:33:39.801:ERROR/AndroidRuntime(5676):FATALEXCEPTION:main
  2. 11-1613:33:39.801:ERROR/AndroidRuntime(5676):java.lang.NullPointerException
  3. 11-1613:33:39.801:ERROR/AndroidRuntime(5676):atcom.huitu.project.PicActivity.onKeyDown(PicActivity.java:87)
  4. 11-1613:33:39.801:ERROR/AndroidRuntime(5676):atandroid.view.KeyEvent.dispatch(KeyEvent.java:1257)
  5. 11-1613:33:39.801:ERROR/AndroidRuntime(5676):atandroid.app.Activity.dispatchKeyEvent(Activity.java:2075)


其实 这个原因 是因为

Java代码收藏代码
  1. @Override
  2. publicbooleanonKeyDown(intkeyCode,KeyEventevent){
  3. if(event.getRepeatCount()==0&&camera!=null){
  4. switch(keyCode){
  5. caseKeyEvent.KEYCODE_SEARCH://按下的是搜索键
  6. camera.autoFocus(null);//自动对焦
  7. returntrue;
  8. caseKeyEvent.KEYCODE_CAMERA:
  9. caseKeyEvent.KEYCODE_DPAD_CENTER:
  10. camera.takePicture(null,null,newMyPictureCallback());
  11. Intentdata=newIntent();
  12. data.putExtra("picFile",picFile.getAbsolutePath());
  13. setResult(100,data);
  14. finish();
  15. returntrue;
  16. }
  17. }
  18. returnsuper.onKeyDown(keyCode,event);
  19. }
  20. privatefinalclassMyPictureCallbackimplementsPictureCallback{
  21. privateStringname="pic";
  22. publicvoidonPictureTaken(byte[]data,Cameracamera){
  23. try{
  24. Bitmapbitmap=BitmapFactory.decodeByteArray(data,0,data.length);
  25. picFile=newFile(Environment.getExternalStorageDirectory(),name+System.currentTimeMillis()+".jpg");
  26. FileOutputStreamoutStream=newFileOutputStream(picFile);
  27. bitmap.compress(CompressFormat.JPEG,100,outStream);
  28. outStream.close();
  29. //camera.startPreview();
  30. }catch(Exceptione){
  31. e.printStackTrace();
  32. }
  33. }
  34. }

Java代码收藏代码
  1. camera.takePicture(null,null,newMyPictureCallback());
这个方法是异步执行的 也就是说

new MyPictureCallback()还没有执行完成,

Java代码收藏代码
  1. Intentdata=newIntent();
  2. data.putExtra("picFile",picFile.getAbsolutePath());
  3. setResult(100,data);
  4. finish();

下面的代码就开始执行了 这时候 picFile就是空的 所以就会报空指针异常

解决方法 把

Java代码收藏代码
  1. Intentdata=newIntent();
  2. data.putExtra("picFile",picFile.getAbsolutePath());
  3. setResult(100,data);
  4. finish();
  5. 放到MyPictureCallback()里面最后执行即可






因为项目中有用到相机拍照功能,所以研究了下camera。
在实践的过程中发现两个问题:
1、用模拟器启动不了camera,提示:java.lang.runtimeException:setparameters failed.....
因为parameters.setPictureSize(320, 480)(设置分辨率)的参数有误,
如果不清楚分辨率可以却掉这句话,再运行就OK 了。
如果真的想看分辨率可以看logcat日志上面有写:getParameters(....)里面就是一些相关的参数。
2、连续两次以上的拍照,会出现异常:java.lang.RuntimeException:fail to connect to camera service。
因为没有对camera进行释放,或者说系统有自动释放功能但是还没有被处理。可以通过手动释放:
/**
* 停止预览
*/
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
mCamera.stopPreview();
mCamera.release();//加上这句,就OK!
mCamera=null;

}
分享到:
评论

相关推荐

    Android Camera1 Demo - 实现预览、拍照、录制视频功能

    由于工作中需要用到Camera1,所以花了两天时间研究了以下,使用Android Camera1 API实现了相机预览、拍照和录制视频的功能。 资源中有个MyCamera1Demo.apk可以直接安装运行,MyCamera1Demo.zip是Demo源码。 具体详见...

    Android代码-Android相机预览拍照录像滤镜详解

    本系列会包括Android Camera预览,拍照,视频录制,播放,滤镜及渲染等,还会对相机系统原理做深入分析。 一、相机预览 序号 项目名称 内容简介 1 GLSurfacePreview GLSurfaceView OpenGL相机预览,直接绘制...

    Android Studio 自定义相机+拍照保存到本地.zip

    主页面中有两个按钮:拍照和图片编辑,只对拍照添加了监听事件。拍照页面也有两个按钮:常规模式和笑脸模式,也只对常规模式添加了监听事件,调用的是后置摄像头。图片保存在系统根目录下。命名为:MyPhoto_...

    Android代码-基于Kotlin实现的相机APP

    > Android平台上拍照/录像,图片/视频选择,编辑和压缩的一站式解决方案。 图片/视频的选择,编辑和压缩是日常开发中的常见需求,Phoenix完整的实现了这些功能,并提供了优雅的调用方式。Phoenix的核心功能基于...

    Android蓝牙远程控制相机

    两台带有蓝牙和相机的Android手机,通过蓝牙互联,可以控制另外一个手机的相机,并且可以实时预览,控制拍照。

    Android 开发随手笔记之使用摄像头拍照

    在Android中,使用摄像头拍照一般有两种方法, 一种是调用系统自带的Camera,另一种是自己写一个摄像的界面。  我们要添加如下权限: <uses android:name=android.permission.WRITE_EXTERNAL_STORAGE/> <uses ...

    SpyCam:Android库使用Camera2 API在没有Camera Preview的情况下在后台拍照

    间谍相机这个库是做什么用的? 该库允许应用程序使用设备相机拍摄照片,而不显示其预览。 任何应用程序都可以在后台从前置摄像头捕获图像。... 步骤1:创建SpyService实例...在其中,您必须传递两个参数,第一个是Activity

    Snap Camera HDR_v6.4.3

    一键拍摄照片和录制视频,没有凌乱的预览界面,仅有两个您真正需要的按钮! 简洁、强大的用户界面: - 触摸可对焦 - 开合两根手指可缩放/变焦 - 滑动可查看照片/视频 - 触摸并按住可使用照片控制器来调整照片设置 ...

    疯狂Android讲义源码

     11.3.1 通过Camera进行拍照 442  11.3.2 录制视频短片 446  11.4 本章小结 450  第12章 OpenGL与3D应用开发 451  12.1 3D图像与3D开发的  基本知识 452  12.2 OpenGL和OpenGL ES简介 453  12.3 绘制2D图形 ...

    Android音视频之视频采集(系统API预览)

    Android有两个视频采集的API,Camera是Android 5.0以前使用的,现在已经废弃了,我们还是得学一下他的使用,Camera2是最新的视频采集API,我们重点了解它的使用。这篇文章我们掌握调用系统的拍照和录制视频API来实现...

    MOTO X相机 MOTO X Camera v5.0.11.7

    MOTO X相机 MOTO X Camera v5.0.11.7 ...另外,此程序由于移植得不是太好,所以目前已知有以下几个问题: 1.HDR模式被锁定,无法开启。 2.全景拍照模式无法使用,会造成相机FC。 3.快速启动相机功能无法使用。

    Sate4412开发板用户手册(linux android 编译开发环境搭建)V1.4.1.pdf

    Camera模块 支持300万像素CMOS Camera驱动,支持预览、拍照、录像功能 网口模块 10M/100M自适应网口驱动,支持以太网功能 HDMI显示 支持HDMI输出,同时支持图像和声音 Audio驱动 支持音频播放功能 LCD显示 可选配7寸...

    poco相机 android v1.1.2

    “POCO相机”是针对手机拍照用户群推出的多镜头拍照及视频、美化处理、一键多平台分享的超级手机拍照工具。 ● iPhone版上线一周内,相继荣登大陆/港澳台/新马泰等华语国家及...5、新增两个新特效:古典黄、怀旧蓝。

    疯狂Android讲义.part2

    18.6.4 判断两个方块是否可以相连 622 18.6.5 定义获取通道的工具方法 623 18.6.6 没有转折点的横向连接 625 18.6.7 没有转折点的纵向连接 626 18.6.8 一个转折点的连接 626 18.6.9 两个转折点的连接 629 18.6.10 找...

    疯狂Android讲义.part1

    18.6.4 判断两个方块是否可以相连 622 18.6.5 定义获取通道的工具方法 623 18.6.6 没有转折点的横向连接 625 18.6.7 没有转折点的纵向连接 626 18.6.8 一个转折点的连接 626 18.6.9 两个转折点的连接 629 18.6.10 找...

    nativescript-camera:使用设备相机授权的NativeScript插件

    NativeScript相机插件是为作业的前两个部分(拍照并选择保存到设备存储空间)设计的。安装导航到项目文件夹并运行NativeScript-CLI命令tns plugin add nativescript-camera可以将插件添加为标准npm依赖项运行命令...

    poco相机 android v1.1.1

    “POCO相机”是针对手机拍照用户群推出的多镜头拍照及视频、美化处理、一键多平台分享的超级手机...3、新增两个新特效:HDR轻、美白嫩肤! 4、优化对中国移动cmwap网络的支持; 5、优化对高分辨率手机和平板的支持。

    p720_ov2640_r58_dev拍照和录像都是720p的分辨率20160713_1430.7z

    1、配置ov2640在android层配置的分辨率为vga(预览/拍照/录像) 注意:系统自带的快拍APP就在这里查找分辨率参数发送到camera的HAL层。 cubieboard2开发板使用的是全志A20的CPU,自带两路CSI的摄像头接口。 一般使用...

Global site tag (gtag.js) - Google Analytics