Most visited

Recently visited

Added in API level 1
Deprecated since API level 21

Camera

public class Camera
extends Object

java.lang.Object
   ↳ android.hardware.Camera


该类在API级别21中已被弃用。
我们建议在新的应用程序中使用新的android.hardware.camera2 API。

Camera类用于设置图像捕捉设置,启动/停止预览,捕捉图片以及检索视频编码帧。 该类是Camera服务的客户端,用于管理实际的相机硬件。

要访问设备相机,您必须在Android清单中声明CAMERA权限。 还要确保包含<uses-feature>清单元素来声明应用程序使用的相机功能。 例如,如果您使用相机和自动对焦功能,则清单应包含以下内容:

 <uses-permission android:name="android.permission.CAMERA" />
 <uses-feature android:name="android.hardware.camera" />
 <uses-feature android:name="android.hardware.camera.autofocus" />

要使用此课程拍摄照片,请使用以下步骤:

  1. Obtain an instance of Camera from open(int).
  2. Get existing (default) settings with getParameters().
  3. If necessary, modify the returned Camera.Parameters object and call setParameters(Camera.Parameters).
  4. Call setDisplayOrientation(int) to ensure correct orientation of preview.
  5. Important: Pass a fully initialized SurfaceHolder to setPreviewDisplay(SurfaceHolder). Without a surface, the camera will be unable to start the preview.
  6. Important: Call startPreview() to start updating the preview surface. Preview must be started before you can take a picture.
  7. When you want, call takePicture(Camera.ShutterCallback, Camera.PictureCallback, Camera.PictureCallback, Camera.PictureCallback) to capture a photo. Wait for the callbacks to provide the actual image data.
  8. After taking a picture, preview display will have stopped. To take more photos, call startPreview() again first.
  9. Call stopPreview() to stop updating the preview surface.
  10. Important: Call release() to release the camera for use by other applications. Applications should release the camera immediately in onPause() (and re-open() it in onResume()).

要快速切换到视频录制模式,请使用以下步骤:

  1. Obtain and initialize a Camera and start preview as described above.
  2. Call unlock() to allow the media process to access the camera.
  3. Pass the camera to setCamera(Camera). See MediaRecorder information about video recording.
  4. When finished recording, call reconnect() to re-acquire and re-lock the camera.
  5. If desired, restart preview and take more photos or videos.
  6. Call stopPreview() and release() as described above.

这个类不是线程安全的,并且意味着从一个事件线程使用。 大多数长时间运行的操作(预览,焦点,照片捕捉等)都是异步发生的,并根据需要调用回调。 回调将在事件线程open(int)被调用时调用。 绝不能一次从多个线程调用这个类的方法。

注意:不同的Android设备可能具有不同的硬件规格,例如百万像素等级和自动对焦功能。 为了让您的应用程序与更多设备兼容,您不应该对设备相机规格做出假设。

Developer Guides

有关使用摄像头的更多信息,请阅读 Camera开发人员指南。

Summary

Nested classes

class Camera.Area

此类已在API级别21中弃用。我们建议将新的android.hardware.camera2 API用于新应用程序。

interface Camera.AutoFocusCallback

此接口在API级别21中已弃用。我们建议将新的android.hardware.camera2 API用于新应用程序。

interface Camera.AutoFocusMoveCallback

该接口在API级别21中已弃用。我们建议将新的android.hardware.camera2 API用于新应用程序。

class Camera.CameraInfo

此类已在API级别21中弃用。我们建议将新的android.hardware.camera2 API用于新应用程序。

interface Camera.ErrorCallback

此接口在API级别21中已弃用。我们建议将新的android.hardware.camera2 API用于新应用程序。

class Camera.Face

此类已在API级别21中弃用。我们建议将新的android.hardware.camera2 API用于新应用程序。

interface Camera.FaceDetectionListener

此接口在API级别21中已弃用。我们建议将新的android.hardware.camera2 API用于新应用程序。

interface Camera.OnZoomChangeListener

此接口在API级别21中已弃用。我们建议将新的android.hardware.camera2 API用于新应用程序。

class Camera.Parameters

此类已在API级别21中弃用。我们建议将新的android.hardware.camera2 API用于新应用程序。

interface Camera.PictureCallback

此接口在API级别21中已弃用。我们建议将新的android.hardware.camera2 API用于新应用程序。

interface Camera.PreviewCallback

此接口已在API级别21中弃用。我们建议将新的android.hardware.camera2 API用于新应用程序。

interface Camera.ShutterCallback

此接口在API级别21中已弃用。我们建议将新的android.hardware.camera2 API用于新应用程序。

class Camera.Size

此类已在API级别21中弃用。我们建议将新的android.hardware.camera2 API用于新应用程序。

Constants

String ACTION_NEW_PICTURE

此常数在API级别24中已弃用。此广播不再由系统交付; 使用JobInfo.Builder addTriggerContentUri(JobInfo.TriggerContentUri) 广播动作:相机拍摄新照片,并将照片的条目添加到媒体商店。 getData()是图片的URI。

String ACTION_NEW_VIDEO

此常数在API级别24中已弃用。此广播不再由系统交付; 使用JobInfo.Builder addTriggerContentUri(JobInfo.TriggerContentUri) 广播动作:相机记录了一个新视频,并且该视频的条目已添加到媒体商店。 getData()是视频的URI。

int CAMERA_ERROR_EVICTED

相机因较高优先级用户使用而断开连接。

int CAMERA_ERROR_SERVER_DIED

媒体服务器死亡。

int CAMERA_ERROR_UNKNOWN

未指定的相机错误。

Public methods

final void addCallbackBuffer(byte[] callbackBuffer)

将预分配的缓冲区添加到预览回调缓冲区队列中。

final void autoFocus(Camera.AutoFocusCallback cb)

启动相机自动对焦并注册回放功能以在相机对焦时运行。

final void cancelAutoFocus()

取消正在进行的任何自动对焦功能。

final boolean enableShutterSound(boolean enabled)

拍照时启用或禁用默认的快门声音。

static void getCameraInfo(int cameraId, Camera.CameraInfo cameraInfo)

返回有关特定相机的信息。

static int getNumberOfCameras()

返回此设备上可用的物理照相机数量。

Camera.Parameters getParameters()

返回此Camera服务的当前设置。

final void lock()

重新锁定相机以防止其他进程访问它。

static Camera open()

创建一个新的Camera对象以访问设备上的第一个后置摄像头。

static Camera open(int cameraId)

创建一个新的Camera对象来访问特定的硬件摄像头。

final void reconnect()

在另一个进程使用它后重新连接到摄像机服务。

final void release()

断开并释放Camera对象资源。

void setAutoFocusMoveCallback(Camera.AutoFocusMoveCallback cb)

设置相机自动对焦移动回调。

final void setDisplayOrientation(int degrees)

以度为单位设置预览显示的顺时针旋转。

final void setErrorCallback(Camera.ErrorCallback cb)

注册发生错误时要调用的回调。

final void setFaceDetectionListener(Camera.FaceDetectionListener listener)

注册侦听器,以通知在预览帧中检测到的脸部。

final void setOneShotPreviewCallback(Camera.PreviewCallback cb)

除了将其显示在屏幕上之外,还安装一个回调以供下一个预览框调用。

void setParameters(Camera.Parameters params)

更改此相机服务的设置。

final void setPreviewCallback(Camera.PreviewCallback cb)

除了在屏幕上显示预览框之外,还安装要调用的每个预览框的回调。

final void setPreviewCallbackWithBuffer(Camera.PreviewCallback cb)

除了在屏幕上显示它们之外, addCallbackBuffer(byte[])使用 addCallbackBuffer(byte[])附带的缓冲区为每个预览帧安装一个回调。

final void setPreviewDisplay(SurfaceHolder holder)

Surface设置为用于实时预览。

final void setPreviewTexture(SurfaceTexture surfaceTexture)

设置 SurfaceTexture用于实时预览。

final void setZoomChangeListener(Camera.OnZoomChangeListener listener)

在平滑变焦过程中,当相机驱动程序更新变焦值时,注册收听者以通知收听者。

final void startFaceDetection()

开始脸部检测。

final void startPreview()

开始捕获和绘制预览帧到屏幕上。

final void startSmoothZoom(int value)

顺利放大所需的值。

final void stopFaceDetection()

停止脸部检测。

final void stopPreview()

停止捕捉和绘制预览帧到表面,并将相机重置为未来呼叫 startPreview()

final void stopSmoothZoom()

停止平滑缩放。

final void takePicture(Camera.ShutterCallback shutter, Camera.PictureCallback raw, Camera.PictureCallback postview, Camera.PictureCallback jpeg)

触发异步图像捕获。

final void takePicture(Camera.ShutterCallback shutter, Camera.PictureCallback raw, Camera.PictureCallback jpeg)

相当于takePicture(快门,原始,空白,jpeg)。

final void unlock()

解锁相机以允许其他进程访问它。

Protected methods

void finalize()

当垃圾收集确定没有更多对该对象的引用时,由对象上的垃圾回收器调用。

Inherited methods

From class java.lang.Object

Constants

ACTION_NEW_PICTURE

Added in API level 14
String ACTION_NEW_PICTURE

此常数在API级别24中已弃用。
该广播不再由系统交付; 使用JobInfo.Builder addTriggerContentUri(JobInfo.TriggerContentUri) 广播动作:相机拍摄新照片,并将照片的条目添加到媒体商店。 getData()是图片的URI。

常量值:“android.hardware.action.NEW_PICTURE”

ACTION_NEW_VIDEO

Added in API level 14
String ACTION_NEW_VIDEO

此常数在API级别24中已弃用。
该广播不再由系统交付; 使用JobInfo.Builder addTriggerContentUri(JobInfo.TriggerContentUri) 广播动作:相机记录了一个新视频,并且该视频的条目已添加到媒体商店。 getData()是视频的URI。

常量值:“android.hardware.action.NEW_VIDEO”

CAMERA_ERROR_EVICTED

Added in API level 23
int CAMERA_ERROR_EVICTED

相机因较高优先级用户使用而断开连接。

也可以看看:

常量值:2(0x00000002)

CAMERA_ERROR_SERVER_DIED

Added in API level 1
int CAMERA_ERROR_SERVER_DIED

媒体服务器死亡。 在这种情况下,应用程序必须释放Camera对象并实例化一个新对象。

也可以看看:

常量值:100(0x00000064)

CAMERA_ERROR_UNKNOWN

Added in API level 1
int CAMERA_ERROR_UNKNOWN

未指定的相机错误。

也可以看看:

常数值:1(0x00000001)

Public methods

addCallbackBuffer

Added in API level 8
void addCallbackBuffer (byte[] callbackBuffer)

将预分配的缓冲区添加到预览回调缓冲区队列中。 应用程序可以将一个或多个缓冲区添加到队列中。 当预览帧到达并且仍然有至少一个可用缓冲区时,缓冲区将被使用并从队列中移除。 然后使用缓冲区调用预览回调。 如果帧到达并且没有剩余缓冲区,则丢弃该帧。 当应用程序处理完数据后,应该添加缓冲区。

对于除YV12以外的格式,缓冲区的大小由预览图像宽度,高度和每像素字节数乘以确定。 宽度和高度可以从getPreviewSize()读取。 每个像素的字节数可以从getBitsPerPixel(int)计算,使用getPreviewFormat()的图像格式。

如果使用 YV12格式,则可以使用 setPreviewFormat(int)列出的公式计算大小。

只有在使用setPreviewCallbackWithBuffer(PreviewCallback)时才需要此方法。 当使用setPreviewCallback(PreviewCallback)setOneShotPreviewCallback(PreviewCallback) ,会自动分配缓冲区。 当提供的缓冲区太小而无法保存预览帧数据时,预览回调将返回空值,缓冲区将从缓冲区队列中移除。

Parameters
callbackBuffer byte: the buffer to add to the queue. The size of the buffer must match the values described above.

也可以看看:

autoFocus

Added in API level 1
void autoFocus (Camera.AutoFocusCallback cb)

启动相机自动对焦并注册回放功能以在相机对焦时运行。 此方法仅在预览处于活动状态时( startPreview()stopPreview()之间)有效。

呼叫者应该检查getFocusMode()以确定是否应该调用此方法。 如果相机不支持自动对焦,则该设备将无法使用,并会立即调用onAutoFocus(boolean, Camera)回调。

如果您的应用程序不应该安装在没有自动对焦的设备上,则必须声明您的应用程序使用 <uses-feature>清单元素来使用自动对焦。

如果当前的闪光模式不是 FLASH_MODE_OFF ,则可能会在自动对焦期间闪光灯闪光,具体取决于驱动程序和相机硬件。

自动曝光锁getAutoExposureLock()和自动白平衡锁getAutoWhiteBalanceLock()在自动对焦期间和之后不会改变。 但是自动对焦程序可能会在对焦过程中暂时停止自动曝光和自动白平衡。

停止预览与stopPreview() ,或触发静态图像捕捉与takePicture(Camera.ShutterCallback, Camera.PictureCallback, Camera.PictureCallback) ,不会改变焦点位置。 应用程序必须调用cancelAutoFocus来重置焦点。

如果自动对焦成功,请考虑使用 MediaActionSound向用户正确播放自动对焦成功声音。

Parameters
cb Camera.AutoFocusCallback: the callback to run

也可以看看:

cancelAutoFocus

Added in API level 5
void cancelAutoFocus ()

取消正在进行的任何自动对焦功能。 无论当前是否正在进行自动对焦,此功能都会将焦点位置返回至默认设置。 如果相机不支持自动对焦,则这是不适用的。

也可以看看:

enableShutterSound

Added in API level 17
boolean enableShutterSound (boolean enabled)

拍照时启用或禁用默认的快门声音。

默认情况下,当takePicture(Camera.ShutterCallback, Camera.PictureCallback, Camera.PictureCallback)时,相机将播放系统定义的相机快门声音。 使用这种方法,可以禁用快门声音。 强烈建议在禁用系统快门声音时在Camera.ShutterCallback播放替代快门声音。

请注意,设备可能无法始终禁用相机快门声音。 如果快门声音状态不能设置为所需的值,则此方法将返回false。 可以使用canDisableShutterSound来确定设备是否允许快门声音被禁用。

Parameters
enabled boolean: whether the camera should play the system shutter sound when takePicture is called.
Returns
boolean true if the shutter sound state was successfully changed. false if the shutter sound state could not be changed. true is also returned if shutter sound playback is already set to the requested state.

也可以看看:

getCameraInfo

Added in API level 9
void getCameraInfo (int cameraId, 
                Camera.CameraInfo cameraInfo)

返回有关特定相机的信息。 如果getNumberOfCameras()返回N,则有效标识为0到N-1。

Parameters
cameraId int
cameraInfo Camera.CameraInfo

getNumberOfCameras

Added in API level 9
int getNumberOfCameras ()

返回此设备上可用的物理照相机数量。

Returns
int

getParameters

Added in API level 1
Camera.Parameters getParameters ()

返回此Camera服务的当前设置。 如果对返回的参数进行了修改,则必须将它们传递给setParameters(Camera.Parameters)才能生效。

Returns
Camera.Parameters

也可以看看:

lock

Added in API level 5
void lock ()

重新锁定相机以防止其他进程访问它。 相机对象默认锁定,除非unlock() 通常使用reconnect()代替。

自API级别14开始,相机会自动锁定以应用于start() 录制开始后,应用程序可以使用相机(例如:变焦)。 录制开始或停止后无需调用此选项。

如果你不录制视频,你可能不需要这种方法。

Throws
RuntimeException if the camera cannot be re-locked (for example, if the camera is still in use by another process).

open

Added in API level 1
Camera open ()

创建一个新的Camera对象以访问设备上的第一个后置摄像头。 如果设备没有后置摄像头,则返回null。

Returns
Camera

也可以看看:

open

Added in API level 9
Camera open (int cameraId)

创建一个新的Camera对象来访问特定的硬件摄像头。 如果相同的相机被其他应用程序打开,则会引发RuntimeException。

完成使用相机后,您必须致电 release() ,否则它将保持锁定状态并且不可用于其他应用程序。

您的应用程序应该一次只有一个Camera对象用于特定的硬件摄像头。

来自其他方法的回调被传递给调用open()的线程的事件循环。 如果此线程没有事件循环,则回调将传递到主应用程序事件循环。 如果没有主应用程序事件循环,则不传递回调。

警告:在某些设备上,此方法可能需要很长时间才能完成。 最好从工作者线程调用此方法(可能使用AsyncTask )以避免阻塞主应用程序UI线程。

Parameters
cameraId int: the hardware camera to access, between 0 and getNumberOfCameras()-1.
Returns
Camera a new Camera object, connected, locked and ready for use.
Throws
RuntimeException if opening the camera fails (for example, if the camera is in use by another process or device policy manager has disabled the camera).

也可以看看:

reconnect

Added in API level 8
void reconnect ()

在另一个进程使用它后重新连接到摄像机服务。 unlock()之后,另一个进程可能会使用相机; 过程完成后,您必须重新连接相机,相机将重新获取锁定并允许您继续使用相机。

自API级别14以来,摄像机自动锁定为start()应用程序。 录制开始后,应用程序可以使用相机(例如:变焦)。 录制开始或停止后无需调用此选项。

如果你不录制视频,你可能不需要这种方法。

Throws
IOException if a connection cannot be re-established (for example, if the camera is still in use by another process).

release

Added in API level 1
void release ()

断开并释放Camera对象资源。

一旦完成Camera对象,您就必须调用它。

setAutoFocusMoveCallback

Added in API level 16
void setAutoFocusMoveCallback (Camera.AutoFocusMoveCallback cb)

设置相机自动对焦移动回调。

Parameters
cb Camera.AutoFocusMoveCallback: the callback to run

setDisplayOrientation

Added in API level 8
void setDisplayOrientation (int degrees)

以度为单位设置预览显示的顺时针旋转。 这会影响预览帧和快照后显示的图片。 此方法对纵向模式应用程序非常有用。 请注意,在旋转之前,前置摄像头的预览显示会水平翻转,也就是说,图像沿摄像头传感器的中心垂直轴进行反射。 所以用户可以看到自己正在照镜子。

这不会影响在onPreviewFrame(byte[], Camera) ,JPEG图片或录制的视频中传递的字节数组的顺序。 预览期间不允许调用此方法。

如果要使相机图像以与显示屏相同的方向显示,可以使用以下代码。

 public static void setCameraDisplayOrientation(Activity activity,
         int cameraId, android.hardware.Camera camera) {
     android.hardware.Camera.CameraInfo info =
             new android.hardware.Camera.CameraInfo();
     android.hardware.Camera.getCameraInfo(cameraId, info);
     int rotation = activity.getWindowManager().getDefaultDisplay()
             .getRotation();
     int degrees = 0;
     switch (rotation) {
         case Surface.ROTATION_0: degrees = 0; break;
         case Surface.ROTATION_90: degrees = 90; break;
         case Surface.ROTATION_180: degrees = 180; break;
         case Surface.ROTATION_270: degrees = 270; break;
     }

     int result;
     if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
         result = (info.orientation + degrees) % 360;
         result = (360 - result) % 360;  // compensate the mirror
     } else {  // back-facing
         result = (info.orientation - degrees + 360) % 360;
     }
     camera.setDisplayOrientation(result);
 }
 

从API级别14开始,可以在预览处于活动状态时调用此方法。

注意:在API级别24之前,方向的默认值为0.从API级别24开始,默认方向将使得强制风景模式下的应用程序具有正确的预览方向,该方向可以是默认值0或180 。在纵向模式下操作或允许改变方向的应用程序在每次方向更改后都必须调用此方法,以确保在所有情况下都能正确显示预览。

Parameters
degrees int: the angle that the picture will be rotated clockwise. Valid values are 0, 90, 180, and 270.

也可以看看:

setErrorCallback

Added in API level 1
void setErrorCallback (Camera.ErrorCallback cb)

注册发生错误时要调用的回调。

Parameters
cb Camera.ErrorCallback: The callback to run

setFaceDetectionListener

Added in API level 14
void setFaceDetectionListener (Camera.FaceDetectionListener listener)

注册侦听器,以通知在预览帧中检测到的脸部。

Parameters
listener Camera.FaceDetectionListener: the listener to notify

也可以看看:

setOneShotPreviewCallback

Added in API level 3
void setOneShotPreviewCallback (Camera.PreviewCallback cb)

除了将其显示在屏幕上之外,还安装一个回调以供下一个预览框调用。 一次调用后,回调被清除。 这种方法可以随时调用,即使预览是实时的。 任何其他预览回调都会被覆盖。

如果您使用预览数据创建视频或静态图像,请强烈考虑使用 MediaActionSound正确指示图像捕获或录制开始/停止给用户。

Parameters
cb Camera.PreviewCallback: a callback object that receives a copy of the next preview frame, or null to stop receiving callbacks.

也可以看看:

setParameters

Added in API level 1
void setParameters (Camera.Parameters params)

更改此相机服务的设置。

Parameters
params Camera.Parameters: the Parameters to use for this Camera service
Throws
RuntimeException if any parameter is invalid or not supported.

也可以看看:

setPreviewCallback

Added in API level 1
void setPreviewCallback (Camera.PreviewCallback cb)

除了在屏幕上显示预览框之外,还安装要调用的每个预览框的回调。 只要预览处于活动状态,就会重复调用回调。 这种方法可以随时调用,即使预览是实时的。 任何其他预览回调都会被覆盖。

如果您使用预览数据创建视频或静态图像,请强烈考虑使用 MediaActionSound正确指示图像捕获或录制开始/停止给用户。

Parameters
cb Camera.PreviewCallback: a callback object that receives a copy of each preview frame, or null to stop receiving callbacks.

也可以看看:

setPreviewCallbackWithBuffer

Added in API level 8
void setPreviewCallbackWithBuffer (Camera.PreviewCallback cb)

除了在屏幕上显示缓冲区addCallbackBuffer(byte[]) ,还可以使用addCallbackBuffer(byte[])附带的缓冲区为每个预览帧安装一个回调。 只要预览处于活动状态且缓冲区可用,就会重复调用回调。 任何其他预览回调都会被覆盖。

此方法的目的是通过允许预览帧存储器重用来提高预览效率和帧速率。 您必须在某个时刻致电addCallbackBuffer(byte[]) - 在调用此方法之前或之后 - 或者不会收到回叫。

如果使用空回调调用此方法,调用 setPreviewCallback(Camera.PreviewCallback)setOneShotPreviewCallback(Camera.PreviewCallback)setPreviewCallback(Camera.PreviewCallback)清除缓冲队列。

如果您使用预览数据创建视频或静态图像,请强烈考虑使用 MediaActionSound正确指示图像捕获或录制开始/停止给用户。

Parameters
cb Camera.PreviewCallback: a callback object that receives a copy of the preview frame, or null to stop receiving callbacks and clear the buffer queue.

也可以看看:

setPreviewDisplay

Added in API level 1
void setPreviewDisplay (SurfaceHolder holder)

设置Surface用于实时预览。 预览时需要表面或表面纹理,并且需要预览以拍摄照片。 同样的表面可以重新设置而不会造成伤害。 设置预览表面将取消设置通过setPreviewTexture(SurfaceTexture)设置的任何预览表面纹理。

调用此方法时, SurfaceHolder必须已经包含表面。 如果使用的是SurfaceView ,你需要注册一个SurfaceHolder.CallbackaddCallback(SurfaceHolder.Callback) ,等待surfaceCreated(SurfaceHolder)调用setPreviewDisplay()之前或开始预览。

必须在startPreview()之前调用此方法。 一个例外是,如果在调用startPreview()之前预览表面未设置(或设置为空),则可以使用非空参数调用此方法一次以设置预览表面。 (这允许相机设置和表面创建并行发生,从而节省时间。)预览运行时,预览表面可能不会改变。

Parameters
holder SurfaceHolder: containing the Surface on which to place the preview, or null to remove the preview surface
Throws
IOException if the method fails (for example, if the surface is unavailable or unsuitable).

setPreviewTexture

Added in API level 11
void setPreviewTexture (SurfaceTexture surfaceTexture)

设置SurfaceTexture用于实时预览。 预览时需要表面或表面纹理,并且需要预览以拍摄照片。 可以重新设置相同的表面纹理而不会造成伤害。 设置预览表面纹理将取消设置通过setPreviewDisplay(SurfaceHolder)设置的任何预览表面。

此方法必须在startPreview()之前startPreview() 一个例外是,如果在调用startPreview()之前预览表面纹理未设置(或设置为空),则可以使用非空参数调用此方法一次以设置预览表面。 (这允许相机设置和表面创建并行发生,从而节省时间。)预览运行时,预览表面纹理可能不会改变。

getTimestamp()提供的SurfaceTexture作为预览纹理提供的时间戳具有未指定的零点,不能直接在不同摄像机或同一摄像机的不同实例之间进行比较,也不能在同一程序的多次运行中进行比较。

如果您使用预览数据创建视频或静态图像,请强烈考虑使用 MediaActionSound正确指示图像捕获或录制开始/停止给用户。

Parameters
surfaceTexture SurfaceTexture: the SurfaceTexture to which the preview images are to be sent or null to remove the current preview surface texture
Throws
IOException if the method fails (for example, if the surface texture is unavailable or unsuitable).

也可以看看:

setZoomChangeListener

Added in API level 8
void setZoomChangeListener (Camera.OnZoomChangeListener listener)

在平滑变焦过程中,当相机驱动程序更新变焦值时,注册收听者以通知收听者。

Parameters
listener Camera.OnZoomChangeListener: the listener to notify

也可以看看:

startFaceDetection

Added in API level 14
void startFaceDetection ()

开始脸部检测。 这应该在预览开始后调用。 相机将通知Camera.FaceDetectionListener预览画面中检测到的脸部。 检测到的脸部可能与以前的脸部相同。 应用程序应该调用stopFaceDetection()来停止人脸检测。 如果getMaxNumDetectedFaces()返回大于0的数字,则支持此方法。如果面部检测已启动,则应用程序不应再次调用此方法。

当脸部检测正在运行, setWhiteBalance(String)setFocusAreas(List) ,并setMeteringAreas(List)没有任何效果。 相机使用检测到的脸部进行自动白平衡,自动曝光和自动对焦。

如果应用程序调用autoFocus(AutoFocusCallback) ,相机将停止发送面部回调。 最后一次面部回调表示用于自动对焦的区域。 对焦完成后,脸部侦测将恢复发送脸部回调。 如果应用程序调用cancelAutoFocus() ,则面部回调也将恢复。

在调用 takePicture(Camera.ShutterCallback, Camera.PictureCallback, Camera.PictureCallback)stopPreview() ,然后使用 startPreview()继续预览 startPreview() ,应用程序应该再次调用此方法以恢复面部检测。

Throws
IllegalArgumentException if the face detection is unsupported.
RuntimeException if the method fails or the face detection is already running.

也可以看看:

startPreview

Added in API level 1
void startPreview ()

开始捕获和绘制预览帧到屏幕上。 预览实际上不会启动,直到曲面由setPreviewDisplay(SurfaceHolder)setPreviewTexture(SurfaceTexture)

如果 setPreviewCallback(Camera.PreviewCallback) setOneShotPreviewCallback(Camera.PreviewCallback)setPreviewCallbackWithBuffer(Camera.PreviewCallback) ,则在预览数据可用时将调用 onPreviewFrame(byte[], Camera)

startSmoothZoom

Added in API level 8
void startSmoothZoom (int value)

顺利放大所需的值。 驱动程序将通知Camera.OnZoomChangeListener缩放值以及当时是否停止缩放。 例如,假设当前缩放为0,并且startSmoothZoom被调用值3. onZoomChange(int, boolean, Camera)方法将被调用三次,缩放值为1,2和3.应用程序可以调用stopSmoothZoom()以更早停止缩放。 应用程序不应再次调用startSmoothZoom或在缩放停止之前更改缩放值。 如果提供的缩放值等于当前缩放值,则不会生成缩放回调。 如果isSmoothZoomSupported()返回true,则支持此方法。

Parameters
value int: zoom value. The valid range is 0 to getMaxZoom().
Throws
IllegalArgumentException if the zoom value is invalid.
RuntimeException if the method fails.

也可以看看:

stopFaceDetection

Added in API level 14
void stopFaceDetection ()

停止脸部检测。

也可以看看:

stopPreview

Added in API level 1
void stopPreview ()

停止捕捉和绘制预览帧到表面,并将相机重置为未来呼叫 startPreview()

stopSmoothZoom

Added in API level 8
void stopSmoothZoom ()

停止平滑缩放。 应用程序应等待Camera.OnZoomChangeListener知道缩放实际停止的时间。 如果isSmoothZoomSupported()为true,则支持此方法。

Throws
RuntimeException if the method fails.

takePicture

Added in API level 5
void takePicture (Camera.ShutterCallback shutter, 
                Camera.PictureCallback raw, 
                Camera.PictureCallback postview, 
                Camera.PictureCallback jpeg)

触发异步图像捕获。 随着图像捕捉的进行,相机服务将启动一系列回调应用程序。 拍摄图像后会发生快门回调。 这可以用来触发声音,让用户知道图像已被捕获。 原始回调在原始图像数据可用时发生(注意:如果没有可用的原始图像回调缓冲区或原始图像回调缓冲区不足以容纳原始图像,数据将为空)。 postview回调发生在缩放的,完全处理的postview图像可用时(注意:并非所有的硬件都支持此功能)。 当压缩图像可用时,会发生jpeg回调。 如果应用程序不需要特定的回调,则可以传递null而不是回调方法。

此方法仅在预览处于活动状态( startPreview()之后)时有效。 图像拍摄后,预览将停止; 如果要重新开始预览或拍摄更多照片,来电者必须再次致电startPreview() 这不应该在start()stop()之间stop()

调用此方法后,您不能调用 startPreview()或拍摄其他图片,直到JPEG回调已返回。

Parameters
shutter Camera.ShutterCallback: the callback for image capture moment, or null
raw Camera.PictureCallback: the callback for raw (uncompressed) image data, or null
postview Camera.PictureCallback: callback with postview image data, may be null
jpeg Camera.PictureCallback: the callback for JPEG image data, or null

takePicture

Added in API level 1
void takePicture (Camera.ShutterCallback shutter, 
                Camera.PictureCallback raw, 
                Camera.PictureCallback jpeg)

相当于takePicture(快门,原始,空白,jpeg)。

Parameters
shutter Camera.ShutterCallback
raw Camera.PictureCallback
jpeg Camera.PictureCallback

也可以看看:

unlock

Added in API level 5
void unlock ()

解锁相机以允许其他进程访问它。 通常情况下,相机将被锁定到具有活动相机对象的进程,直到release()被调用。 为了允许进程之间的快速切换,您可以调用此方法暂时释放相机以供其他进程使用; 一旦其他过程完成,您可以致电reconnect()来回收相机。

这必须在拨打setCamera(Camera)之前setCamera(Camera) 记录开始后无法调用。

如果你不录制视频,你可能不需要这种方法。

Throws
RuntimeException if the camera cannot be unlocked.

Protected methods

finalize

Added in API level 1
void finalize ()

当垃圾收集确定没有更多对该对象的引用时,由对象上的垃圾回收器调用。 子类会覆盖finalize方法以处置系统资源或执行其他清理。

finalize的一般协议是,如果当Java TM虚拟机已经确定不再有任何方法可以通过任何尚未死亡的线程访问该对象,除了作为动作的结果取决于某些其他可以完成的对象或类别的最终定稿。 finalize方法可以采取任何行动,包括再制作该对象提供给其他线程; 然而, finalize的通常目的是在对象被不可撤销地丢弃之前执行清理操作。 例如,表示输入/输出连接的对象的finalize方法可能会执行显式I / O事务,以在永久丢弃该对象之前中断连接。

Objectfinalize方法Object执行特殊操作; 它只是正常返回。 Object子类可能会覆盖此定义。

Java编程语言不保证哪个线程将为任何给定对象调用finalize方法。 但是,保证调用finalize的线程在调用finalize时不会保留任何用户可见的同步锁。 如果finalize方法引发未捕获的异常,则忽略该异常,并终止该对象的终止。

在针对某个对象调用 finalize方法之后,在Java虚拟机再次确定不再有任何方法可以通过尚未死亡的任何线程访问此对象之前,不会采取进一步的操作,包括可能的操作通过准备完成的其他对象或类别,此时该对象可能被丢弃。

对于任何给定的对象,Java虚拟机从不会多次调用 finalize方法。

finalize方法抛出的任何异常 finalize导致此对象的终止被暂停,但会被忽略。

Hooray!