Camera2 调用系统相机 java
时间: 2023-09-14 15:02:47 浏览: 45
调用系统相机一般使用 Camera2 API,在 Java 中可以使用以下代码调用:
1. 创建 CameraManager 对象
```
CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
```
2. 获取可用摄像头列表
```
String[] cameraIds = cameraManager.getCameraIdList();
```
3. 打开相机
```
cameraManager.openCamera(cameraId, new CameraDevice.StateCallback() {
@Override
public void onOpened(@NonNull CameraDevice camera) {
// 相机已经打开,可以进行拍照等操作
}
@Override
public void onDisconnected(@NonNull CameraDevice camera) {
// 相机断开连接,释放资源
camera.close();
}
@Override
public void onError(@NonNull CameraDevice camera, int error) {
// 相机发生错误,释放资源
camera.close();
}
}, null);
```
其中 `cameraId` 为要打开的摄像头的 ID,可以从 `cameraIds` 中获取。在 `onOpened` 回调中可以获取到 `CameraDevice` 对象,可以通过该对象进行拍照等操作。
4. 关闭相机
```
camera.close();
```
在使用完相机后,需要调用 `close` 方法释放资源。完整的代码示例:
```
private void openCamera(String cameraId) {
try {
CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
cameraManager.openCamera(cameraId, new CameraDevice.StateCallback() {
@Override
public void onOpened(@NonNull CameraDevice camera) {
// 相机已经打开,可以进行拍照等操作
}
@Override
public void onDisconnected(@NonNull CameraDevice camera) {
// 相机断开连接,释放资源
camera.close();
}
@Override
public void onError(@NonNull CameraDevice camera, int error) {
// 相机发生错误,释放资源
camera.close();
}
}, null);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
```