静默拍照,不需要预览

本文介绍了如何在Android中实现静默拍照,即在后台完成拍照且无预览界面。首先讲解了相机开发的基础知识,包括Camera类、SurfaceView和SurfaceHolder之间的关系。接着详细阐述了如何利用SurfaceTexture实现无预览拍照,指出SurfaceTexture可以接收相机的图像流数据,但不会显示在屏幕上,从而达到静默拍照的效果。
摘要由CSDN通过智能技术生成

静默拍照,不需要相机预览,可以在后台完成拍照并保存。 可用于人脸验证解锁。

一、首先需要了解一下相机开发相关知识。相机开发有两个重要的系统类:
  • 1、Camera.java (android.hardware.Camera)
  • 2、SurafaceView.java (android.view.SurafaceView)

image

1.2 Surface、SurfaceView、SurfaceHolder的关系

image

Surface是用来处理屏幕内容合成器所管理的原始缓存区的工具,它通常由图像缓冲区的消费者创建(如SurfaceTexture、MediaRecorder),然后被移交到生产者(如MediaPlayer)。

SurfaceHolder 一个抽象接口,给持有Surface的对象使用,它可以控制Surface的大小和格式,编辑Surface的像素,以及监听Surface的变化。 这个接口通常通过SurfaceView获得。
SurfaceHolder.Callback有三个回调方法:

  1. surfaceCreated()
  2. surfaceChanged()
  3. surfaceDestroyed()

SurfaceView 提供了嵌入式图层的专用Surface。可以控制Surface的格式和大小,SurfaceView负责把Surface显示在屏幕的正确位置。
SurfaceView继承自View,用于在屏幕上面显示相机的预览画面。
SurfaceView中有两个对象,一个是Surface,一个是SurfaceHolder,我们可以通过getHolder()方法,获得当前SurfaceView的SurfaceHolder对象,通过SurfaceHolder的回调,可以知道surface的状态。

1.3 Camera

Camera类的接口和方法有很多,一个最简单的Camera应用的实现:

// 在surfaceCreated()中

Camera mCamera = Camera.open(0);
Camera.Parameters mParameters = mCamera.getParameters();
mParameters.setPreviewSize(640, 480);
mParameters.setPictureSize(640, 480);
mCamera.setParameters
要在Android中实现后台连续静默拍照,我们可以使用Camera2 API来控制相机硬件,并在后台进行照片的捕获。下面是一种可能的实现方法: 首先,在AndroidManifest.xml文件中添加相应的权限,例如: ``` <uses-permission android:name="android.permission.CAMERA" /> ``` 然后,在你的代码中创建一个CameraCaptureSession.StateCallback的实例,以便相机会话状态发生变化时进行相应的处理。在这个回调接口中,我们需要实现onConfigured()方法来设置照片的捕获设置,并在准备好的时候调用CameraCaptureSession.capture()方法来捕获照片。 接下来,我们需要创建一个CameraCaptureSession.CaptureCallback的实例,用于监听相机捕获照片的过程,并在照片捕获完成时进行相应的处理。在onCaptureCompleted()方法中,我们可以对捕获到的照片进行保存,例如将其保存到指定的文件夹中。 之后,我们需要获取CameraManager的实例,并使用其方法打开相机设备。在打开相机设备之后,我们可以创建一个预览Surface,并将其添加到捕获请求中。 最后,我们可以调用CameraCaptureSession.capture()方法开始捕获照片,捕获的方式可以使用CameraDevice.TEMPLATE_STILL_CAPTURE来指定。 综上所述,通过以上步骤,我们可以在Android中实现后台连续静默拍照的功能。同时,为了避免闪退,我们需要注意合理地进行线程管理和异常处理。 需要注意的是,在使用相机硬件资源时,请确保适当地释放它们,以免造成资源浪费和性能问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值