Android 摄像头类调用实例
时间: 2024-10-08 11:16:20 浏览: 43
在Android开发中,摄像头功能通常通过`Camera`或`Camera2` API来访问。从API版本来看,`Camera`是在较早的版本中使用的,而`Camera2`是在API Level 21及以上推荐的新接口。
以下是使用`Camera2`获取并打开摄像头的基本步骤:
```java
// 首先需要创建CameraManager实例
CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
// 获取设备上可用的摄像头列表
String[] cameraIds = cameraManager.getCameraIdList();
if (cameraIds != null && cameraIds.length > 0) {
// 选择一个相机ID,比如这里选择第一个
String cameraId = cameraIds[0];
// 请求开启相机权限
try {
if (!ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
== PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.CAMERA},
REQUEST_CAMERA_PERMISSION);
} else {
// 如果权限已经授予,尝试打开相机
cameraManager.openCamera(cameraId, cameraCallback, handler);
}
} catch (IOException e) {
Log.e("Camera", "Failed to open camera", e);
}
}
// 定义回调函数,用于接收相机预览帧等事件
private CameraDevice.StateCallback cameraCallback = 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();
}
};
// 其他可能的回调处理...
```
注意,随着Android的发展,`Camera2`已经被废弃,现代应用更倾向于使用`CameraX`库,它提供了更简洁的API和更好的性能管理。在`CameraX`中,操作流程会有所不同,例如:
```java
CameraX.bindToLifecycle(lifecycleOwner, cameraProvider.bindToFirst());
```
阅读全文