java.lang.Object | |
↳ | android.hardware.Camera |
Class Overview
类概述
相机类是用于设置图像捕获设置、启动/停止预览,拍照片,和检索视频帧进行编码。这个类是相机的客户服务,负责管理实际的相机硬件。
对设备的访问摄像头,你必须声明 CAMERA
允许在你的Android清单。也一定要包括< uses-feature >清单元素声明相机功能由您的应用程序使用。例如,如果您使用相机和自动对焦功能,你的清单应该包括以下几点:
<uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" />
与这个类拍照,使用以下步骤:
- 获得相机的一个实例
open(int)
. - 现有(默认)设置
getParameters()
. - 如果有必要,修改返回
Camera.Parameters
对象和调用setParameters(Camera.Parameters)
. - 如果需要,叫
setDisplayOrientation(int)
. - 重要的是:通过一个完全初始化
SurfaceHolder
来setPreviewDisplay(SurfaceHolder)
。没有一个表面,相机将无法启动预览。 - 重要的是:电话
startPreview()
开始更新预览表面。预览必须启动才能拍照。 - 当你想要的,电话
takePicture(Camera.ShutterCallback, Camera.PictureCallback, Camera.PictureCallback, Camera.PictureCallback)
捕捉照片。等待回调提供实际的图像数据。 - 拍一张照片后,预览显示将会停止。多照片,电话
startPreview()
首先再次。 - 调用
stopPreview()
停止更新预览表面。 - 重要的是:调用
release()
释放相机供其他应用程序使用。应用程序应该立即释放相机onPause()
(和re -open()
它在onResume()
).
快速切换到录像模式,使用这些步骤:
- 获取和初始化一个相机,开始预览如上所述。
- 调用
unlock()
让媒体过程访问相机。 - 通过相机
setCamera(Camera)
。看到MediaRecorder
录像信息。 - 当录制完,电话
reconnect()
获得和那个相机。 - 如果需要,重新启动预览并采取更多的照片或视频。
- 调用
stopPreview()
和release()
如上所述。
这个类不是线程安全的,意味着从一个事件线程使用。大多数长时间运行的操作(预览、专注、照片捕捉等)异步发生并调用回调。在事件线程将调用回调 open(int)
被称为。这个类的方法必须从不从多个线程调用。
警告:不同的安卓设备可能有不同的硬件规格,如像素的评级和自动对焦功能。为了使您的应用程序兼容更多的设备,你不应该对设备做出假设相机规格。
开发人员指南
使用相机的更多信息,阅读相机开发人员指南。
总结
嵌套类 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
class | Camera.Area | 区域类是用于选择特定的计量和重点领域的相机使用在计算auto-exposure,auto-white平衡,自动对焦。 | |||||||||
interface | Camera.AutoFocusCallback | 回调接口用于通知完成相机自动对焦。 | |||||||||
interface | Camera.AutoFocusMoveCallback | 回调接口用于通知汽车启动和停止。 | |||||||||
class | Camera.CameraInfo | 一个摄像头的信息 | |||||||||
interface | Camera.ErrorCallback | 回调接口为相机错误通知。 | |||||||||
class | Camera.Face | 脸识别信息通过相机人脸检测。 | |||||||||
interface | Camera.FaceDetectionListener | 回调接口的脸发现预览框。 | |||||||||
interface | Camera.OnZoomChangeListener | 回调接口为缩放变化平滑缩放操作。 | |||||||||
class | Camera.Parameters | 相机服务设置。 | |||||||||
interface | Camera.PictureCallback | 回调接口用来供应从一张照片捕捉图像数据。 | |||||||||
interface | Camera.PreviewCallback | 回调接口用于交付的副本显示预览帧。 | |||||||||
interface | Camera.ShutterCallback | 回调接口用于信号实际图像捕捉的时刻。 | |||||||||
class | Camera.Size | 图像尺寸(宽度和高度尺寸)。 |
常量 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
String | ACTION_NEW_PICTURE | 广播行动:一个新的相机,拍照,和图片的条目添加到媒体商店。 | |||||||||
String | ACTION_NEW_VIDEO | 广播行动:一个新的视频的摄像头记录下来了,视频的条目被添加到媒体商店。 | |||||||||
int | CAMERA_ERROR_SERVER_DIED | 媒体服务器死了。 | |||||||||
int | CAMERA_ERROR_UNKNOWN | 未指明的相机错误。 |
公共方法 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
final void |
addCallbackBuffer
(byte[]callbackBuffer)
增加了一个预分配的缓冲区预览回调缓冲区队列中。
| ||||||||||
final void |
autoFocus(
Camera.AutoFocusCallback cb)
相机打开运行时,自动对焦开始。
| ||||||||||
final void |
cancelAutoFocus()
��消任何自动对焦功能的进步。
| ||||||||||
final boolean |
enableShutterSound
(布尔启用)
启用或禁用默认照相时快门声音。 | ||||||||||
static void |
getCameraInfo
(int cameraId
Camera.CameraInfo
cameraInfo)
返回信息的特定的相机。
| ||||||||||
static int |
getnumberofcameras()
返回在该设备上可用物理摄像机的数量。
| ||||||||||
Camera.Parameters |
getParameters()
这款相机服务返回当前设置。
| ||||||||||
final void |
Re-locks相机以防止其他进程访问它。
| ||||||||||
static Camera |
open(int cameraId)
创建一个新相机对象访问特定硬件相机。
| ||||||||||
static Camera |
open()
创建一个新相机对象来访问设备上的第一台后面的相机。
| ||||||||||
final void |
reconnect()
连接相机的另一个进程使用它后服务。
| ||||||||||
final void |
release()
断开和释放相机对象资源。
| ||||||||||
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 |
这款相机服务更改设置。
| ||||||||||
final void |
setPreviewCallback(
Camera.PreviewCallback cb)
安装要调用回调为每一个预览帧除了显示在屏幕上。 | ||||||||||
final void |
setPreviewCallbackWithBuffer(
Camera.PreviewCallback cb)
安装一个回调为每一个预览帧被调用,使用缓冲区提供 | ||||||||||
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 jpeg)
相当于takePicture(快门,原始,null,jpeg)。
| ||||||||||
final void |
takePicture(
Camera.ShutterCallback shutter,
Camera.PictureCallback raw,
Camera.PictureCallback postview,
Camera.PictureCallback jpeg)
触发异步图像捕获。
| ||||||||||
final void |
unlock()
打开相机让另一个进程访问它。
|
受保护的方法 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
void |
finalize()
时调用垃圾收集器已经发现,这种情况不再是可获得的。
|
Inherited Methods
| |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
![]() |
常量
public static final String ACTION_NEW_PICTURE
广播行动:一个新的相机,拍照,和图片的条目添加到媒体商店。 getData()
URI的画面。
public static final String ACTION_NEW_VIDEO
广播行动:一个新的视频的摄像头记录下来了,视频的条目被添加到媒体商店。 getData()
是视频的URI。
公共方法
public final void addCallbackBuffer (byte[] callbackBuffer)
增加了一个预分配的缓冲区预览回调缓冲区队列中。应用程序可以将一个或多个缓冲区添加到队列中。预览帧到达时,仍有至少有一个缓冲,缓冲将使用和从队列中删除。然后用缓冲预览调用回调。如果一个帧到来,没有缓冲,帧丢弃。应用程序应该添加缓冲区的时候他们完成处理数据。
除了YV12格式,缓冲区的大小是由增加预览图像宽度,高度,每像素和字节。宽度和高度可以读取 getPreviewSize()
。字节可以计算每个像素 getBitsPerPixel(int)
/ 8,使用的图像格式 getPreviewFormat()
.
如果使用 YV12
格式,大小可以使用中列出的方程计算 setPreviewFormat(int)
.
这个方法只是必要的时候 setPreviewCallbackWithBuffer(PreviewCallback)
使用。当 setPreviewCallback(PreviewCallback)
或 setOneShotPreviewCallback(PreviewCallback)
使用自动分配缓冲区。当提供缓冲区太小容纳预览帧数据,预览回调将返回null,从缓冲区队列缓冲区将被删除。
参数
callbackBuffer | 添加到队列缓冲区。缓冲区的大小必须匹配上述值。 |
---|
public final void autoFocus (Camera.AutoFocusCallback cb)
相机自动对焦开始,注册一个回调函数运行时,相机是专注。这个方法只是预览时有效活跃(之间 startPreview()
和之前 stopPreview()
).
调用者应该检查 getFocusMode()
来确定是否应该调用此方法。如果相机不支持自动对焦,这是一个空操作 onAutoFocus(boolean, Camera)
回调将立即被称为。
如果您的应用程序不应该安装在设备没有自动对焦,你必须声明,您的应用程序使用自动对焦< uses-feature >清单元素。
如果当前闪光模式 FLASH_MODE_OFF
在自动对焦,flash可能被解雇,这取决于司机和相机硬件。
Auto-exposure锁 getAutoExposureLock()
和auto-white平衡锁 getAutoWhiteBalanceLock()
不改变期间和之后自动对焦。但是自动对焦程序可能阻止auto-exposure和auto-white平衡中暂时集中。
停止预览与 stopPreview()
,或触发静态图像捕获 takePicture(Camera.ShutterCallback, Camera.PictureCallback, Camera.PictureCallback)
,不会改变焦点位置。应用程序必须调用cancelAutoFocus重置的焦点。
如果自动对焦成功,考虑使用 MediaActionSound
正常播放一个自动对焦成功声音给用户。
参数
CB | 调运行 |
---|
public final void cancelAutoFocus ()
取消任何自动对焦功能的进步。是否自动对焦现在正在进展中,这个函数将返回默认的焦点位置。如果相机不支持自动对焦,这是一个空操作。
public final boolean enableShutterSound (boolean enabled)
启用或禁用默认照相时快门声音。
默认情况下,相机的系统定义相机快门声音时 takePicture(Camera.ShutterCallback, Camera.PictureCallback, Camera.PictureCallback)
被称为。使用这种方法,可以禁用快门声音。强烈建议另一个快门声音播放 Camera.ShutterCallback
当系统快门声音是禁用的。
注意,设备可能并不总是允许禁用照相机快门的声音。如果快门声音状态不能设置为所需的值,该方法将返回false。 canDisableShutterSound
可用于确定该设备是否会允许快门声音被禁用。
参数
启用 | 相机是否应该玩系统时快门声音 takePicture 被称为。 |
---|
返回
true
如果快门声音状态是成功地改变了。false
如果快门声音状态是不能改变的。true
也返回如果快门声音回放已经设置为请求的状态。
public static void getCameraInfo (int cameraId, Camera.CameraInfo cameraInfo)
返回信息的特定的相机。如果 getNumberOfCameras()
返回有效的id是0到N,N - 1。
public Camera.Parameters getParameters ()
这款相机服务返回当前设置。如果返回的参数作了修改,必须传递给他们 setParameters(Camera.Parameters)
生效。
public final void lock ()
Re-locks相机以防止其他进程访问它。相机对象锁定在默认情况下,除非 unlock()
被称为。正常情况下 reconnect()
而不是使用。
API级别14日以来相机是自动锁的应用程序 start()
。应用程序可以使用相机记录开始后(例:变焦)。没有必要称之为后记录启动或停止。
如果你不是录制的视频,你可能不需要这种方法。
抛出
RuntimeException | 如果相机不能re-locked(例如,如果相机是由另一个进程仍在使用)。 |
---|
ublic static Camera open (int cameraId)
创建一个新相机对象访问特定硬件相机。如果相同的相机被其他应用程序打开,这将抛出一个RuntimeException。
你必须叫 release()
当你使用相机,否则它将保持锁定,不可用其他应用程序。
您的应用程序应该只有一个相机对象活动的时间为一个特定的硬件的相机。
从其他方法传递给回调事件循环的线程调用open()。如果线程没有事件循环,然后回调传递到主应用程序事件循环。如果没有主应用程序事件循环,回调不了。
警告:在一些设备上,这种方法可能需要很长时间才能完成。最好是从一个worker线程调用该方法(可能使用 AsyncTask
),以避免阻塞主应用程序UI线程。
参数
cameraid | 相机硬件访问,介于0到 getNumberOfCameras() 1。 |
---|
返回
- 一个新的相机对象、连接、锁和准备使用。
抛出
RuntimeException | 如果打开相机失败(例如,如果相机是由另一个进程或设备在使用策略管理员禁用了相机)。 |
---|
public static Camera open ()
public final void reconnect ()
连接相机的另一个进程使用它后服务。后 unlock()
被调用时,另一个进程可以使用照相机,当这个过程完成后,你必须重新连接到相机,将重新获得锁并允许您继续使用相机。
API级别14日以来相机是自动锁的应用程序 start()
。应用程序可以使用相机记录开始后(例:变焦)。没有必要称之为后记录启动或停止。
如果你不是录制的视频,你可能不需要这种方法。
抛出
IOException | 如果不能重新建立连接(例如,如果相机是由另一个进程仍在使用)。 |
---|
public void setAutoFocusMoveCallback (Camera.AutoFocusMoveCallback cb)
设置相机自动对焦移回调。
参数
CB | 调运行 |
---|
public final 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日预览时调用这个方法可以活跃。
参数
度 | 照片的角度将顺时针旋转。有效的值是0,90,180,180。起始位置为0(景观)。 |
---|
public final void setErrorCallback (Camera.ErrorCallback cb)
public final void setFaceDetectionListener (Camera.FaceDetectionListener listener)
public final void setOneShotPreviewCallback (Camera.PreviewCallback cb)
安装要调用回调为下���个预览帧除了显示在屏幕上。一个调用后,回调被清除。这个方法可以调用任何时候,即使预览是生活。任何其他预览回调是覆盖。
如果您使用的是预览数据创建视频和静态图像,强烈考虑使用 MediaActionSound
正确显示图像捕获或录音开始/停止给用户。
参数
CB | 一个回调对象,收到一份未来预览框,或null停止接收回调。 |
---|
另请参阅
public void setParameters (Camera.Parameters params)
public final void setPreviewCallback (Camera.PreviewCallback cb)
安装要调用回调为每一个预览帧除了显示在屏幕上。回调将反复呼吁只要预览是活跃的。调用这个方法可以在任何时候,即使在预览。任何其他预览回调是覆盖。
如果您使用的是预览数据创建视频和静态图像,强烈考虑使用 MediaActionSound
正确显示图像捕获或录音开始/停止给用户。
参数
CB | 一个回调对象,收到每个预览帧的副本,或null停止接收回调。 |
---|
另请参阅
public final void setPreviewCallbackWithBuffer (Camera.PreviewCallback cb)
安装一个回调为每一个预览帧被调用,使用缓冲区提供 addCallbackBuffer(byte[])
除了显示在屏幕上。回调将反复呼吁只要预览活跃和缓冲。任何其他预览回调是覆盖。
这种方法的目的是提高效率和预览帧率通过允许预览帧记忆重用。你必须叫 addCallbackBuffer(byte[])
在某种程度上,之前或之后调用该方法,或者没有回调会收到。
缓冲队列将被清除,如果调用这个方法时使用一个空回调, setPreviewCallback(Camera.PreviewCallback)
被调用时,或者 setOneShotPreviewCallback(Camera.PreviewCallback)
被称为。
如果您使用的是预览数据创建视频和静态图像,强烈考虑使用 MediaActionSound
正确显示图像捕获或录音开始/停止给用户。
参数
CB | 一个回调对象,收到一份预览框,或null停止接收回调并清除缓冲区队列中。 |
---|
public final void setPreviewDisplay (SurfaceHolder holder)
设置 Surface
用于预览。表面或表面纹理是必要的,预览,预览拍照是必要的。可以重新设定相同的表面没有伤害。设置一个预览表面将un-set任何预览设置通过表面纹理 setPreviewTexture(SurfaceTexture)
.
的 SurfaceHolder
必须已经包含一个表面时,调用此方法。如果您使用的是 SurfaceView
,你需要注册一个 SurfaceHolder.Callback
与 addCallback(SurfaceHolder.Callback)
并等待 surfaceCreated(SurfaceHolder)
之前调用setPreviewDisplay()或开始预览。
必须调用此方法 startPreview()
。预览表面的一个例外是,如果没有设置(或设置为null)之前startPreview(),那么这种方法可能被称为一次用一个非空参数设置预览表面。(这允许相机设置和表面创建并行发生,节省时间)。预览表面可能不会改变而预览正在运行。
参数
Parameters
持有人 | 包含的面把预览,或null删除预览表面 |
---|
public final void setPreviewTexture (SurfaceTexture surfaceTexture)
设置 SurfaceTexture
用于预览。表面或表面纹理是必要的,预览,预览拍照是必要的。相同的表面纹理可以重新设定没有伤害。设置一个预览表面纹理将un-set任何预览设置通过表面 setPreviewDisplay(SurfaceHolder)
.
必须调用此方法 startPreview()
。一个例外是,如果不设置预览表面纹理(或设置为null)之前startPreview(),那么这种方法可能被称为一次用一个非空参数设置预览表面。(这允许相机设置和表面创建并行发生,节省时间)。预览表面纹理可能不会改变而预览正在运行。
提供的时间戳 getTimestamp()
为一套SurfaceTexture预览纹理有一个未指明的零点,和不能直接比较不同的相机或不同实例之间相同的相机,或者在多个运行相同的程序。
如果您使用的是预览数据创建视频和静态图像,强烈考虑使用 MediaActionSound
正确显示图像捕获或录音开始/停止给用户。
public final void setZoomChangeListener (Camera.OnZoomChangeListener listener)
public final void startFaceDetection ()
启动人脸检测。这应该叫做预览后开始。相机将通知 Camera.FaceDetectionListener
发现面临的预览框。发现面临着可能与之前��相同。应用程序应该调用 stopFaceDetection()
人脸检测。如果这种方法支持 getMaxNumDetectedFaces()
返回一个数字大于0。如果人脸检测开始,应用程序不应该称之为一次。
人脸检测在运行时, setWhiteBalance(String)
, setFocusAreas(List)
, setMeteringAreas(List)
没有效果。相机使用检测面临auto-white平衡,自动曝光,自动对焦。
如果应用程序调用 autoFocus(AutoFocusCallback)
,相机将停止发送面临回调。最后面临回调表明用来做自动对焦区域。集中完成后,人脸检测将简历发送面临回调。如果应用程序调用 cancelAutoFocus()
,回调函数也将恢复。
后调用 takePicture(Camera.ShutterCallback, Camera.PictureCallback, Camera.PictureCallback)
或 stopPreview()
,然后恢复预览 startPreview()
再次,应用程序应该调用这个方法恢复人脸检测。
抛出
IllegalArgumentException | 如果人脸检测是不支持的。 |
---|---|
RuntimeException | 如果方法失败或人脸检测已经运行。 |
public final void startPreview ()
public final void startSmoothZoom (int value)
缩放请求值平滑。司机将会通知 Camera.OnZoomChangeListener
放大的价值和缩放是否停止。例如,假设当前缩放是0和startSmoothZoom叫做值3。的 onZoomChange(int, boolean, Camera)
方法将调用三次用变焦值1、2和3。应用程序可以调用 stopSmoothZoom()
停止变焦。应用程序不应该再叫startSmoothZoom或更改缩放��放大之前停止。如果提供的缩放值等于当前缩放值,没有变焦回调将生成。如果这种方法支持 isSmoothZoomSupported()
返回true。
参数
价值 | 缩放值。有效的范围是0到 getMaxZoom() . |
---|
抛出
IllegalArgumentException | 如果缩放值是无效的。 |
---|---|
RuntimeException | 如果方法失败。 |
public final void stopSmoothZoom ()
停止平滑缩放。应用程序应该等待 Camera.OnZoomChangeListener
知道什么时候变焦实际上停止了。如果这种方法支持 isSmoothZoomSupported()
是真的。
抛出
RuntimeException | 如果方法失败。 |
---|
public final void takePicture (Camera.ShutterCallback shutter, Camera.PictureCallback raw, Camera.PictureCallback jpeg)
相当于takePicture(shutter, raw, null, jpeg).
public final void takePicture (Camera.ShutterCallback shutter, Camera.PictureCallback raw, Camera.PictureCallback postview, Camera.PictureCallback jpeg)
触发异步图像捕获。相机的服务将启动一系列回调应用图像捕获的进展。快门调图像捕获后发生。这可以用来触发一个声音让用户知道图像已被抓获。原始的回调时的原始图像数据是可用的(注意:数据将null如果没有原始图像调缓冲区可用或原始图像调缓冲区不够大,保存原始图像)。postview回调时发生了,完全处理postview形象是可用的(注意:并不是所有的硬件支持)。压缩的jpeg回调时可用。如果应用程序不需要特定的回调,一个空可以传递,而不是一个回调方法。
这种方法仅仅是有效的(在预览时活跃 startPreview()
)。预览图像后将停止拍摄,调用者必须调用 startPreview()
如果他们想再次重启预览或者采取更多的照片。这不应该被称为之间 start()
和 stop()
.
调用该方法之后,您不能调用 startPreview()
或者另一张照片,直到JPEG调回来了。
参数
shutter | 回调图像捕获的时刻,或null |
---|---|
raw | 原始(未压缩的)图像数据的回调,或null |
PostView | 回调postview图像数据,可能是null |
Jpeg | JPEG图像数据的回调或null |
public final void unlock ()
打开相机让另一个进程访问它。通常情况下,相机被锁定对象,直到流程用一个活跃的相机 release()
被称为。允许进程间快速切换,可以调用这个方法来释放另一个进程使用的相机暂时;一旦完成了其他流程可以调用 reconnect()
收回的相机。
这之前必须完成的使命 setCamera(Camera)
。这不能称为记录后开始。
如果你不是录制的视频,你可能不需要这种方法。
抛出
RuntimeException | 如果相机不能解锁。 |
---|
Protected Methods
protected void finalize ()
时调用垃圾收集器已经发现,这种情况不再是可获得的。默认并没有实现,但这种方法可以覆盖免费资源。
注意,对象覆盖 finalize
更昂贵的比不的对象。终结器可能会运行很长一段时间后的对象不再是可获得的,根据内存压力,所以这是一个坏主意为清理依靠他们。还要注意终结器运行在单个vm级终结器线程,这样做阻止工作终结器是一个坏主意。终结器通常是唯一必要的类有一个本地同行,需要调用本机方法对等摧毁。即便如此,最好提供一个明确的 close
方法(和实施 Closeable
),坚持手动调用者处理实例。这适用于类似的文件,但是不那么像一个 BigInteger
在典型的调用代码必须处理大量的临时变量。不幸的是,代码创建大量的临时变量是最糟糕的代码从一个终结器线程的角度。
如果你必须使用终结器,考虑至少提供你自己的 ReferenceQueue
并拥有自己的线程队列的过程。
与构造函数不同的是,终结器不会自动链接。你是负责调用 super.finalize()
你自己。
未捕获的异常抛出���结器被忽略,不终结器线程终止。看到有效的Java项目7,“避免终结器”。