java 使用CameraX调用系统相机
时间: 2023-09-16 22:13:34 浏览: 184
调用系统照相机
使用 CameraX 调用系统相机,可以通过以下步骤实现:
1. 在 build.gradle 文件中添加以下依赖项:
```
dependencies {
def camerax_version = "1.0.0-beta04"
// CameraX core library
implementation "androidx.camera:camera-core:$camerax_version"
// CameraX Camera2 extensions
implementation "androidx.camera:camera-camera2:$camerax_version"
// CameraX lifecycle library
implementation "androidx.camera:camera-lifecycle:$camerax_version"
// CameraX view binding
implementation "androidx.camera:camera-view-binding:$camerax_version"
}
```
2. 在 layout 文件中添加 PreviewView,用于显示相机预览:
```
<androidx.camera.view.PreviewView
android:id="@+id/viewFinder"
android:layout_width="match_parent"
android:layout_height="match_parent" />
```
3. 在 Activity 或 Fragment 中创建一个 CameraProvider,并将其绑定到 PreviewView 上:
```
private lateinit var cameraProvider: ProcessCameraProvider
private val previewView: PreviewView by lazy {
findViewById<PreviewView>(R.id.viewFinder)
}
private fun startCamera() {
val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
cameraProviderFuture.addListener(Runnable {
// Bind the preview use case to the previewView
val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get()
val preview = Preview.Builder().build().also {
it.setSurfaceProvider(previewView.surfaceProvider)
}
// Create a new CameraSelector object for choosing which camera to use
val cameraSelector = CameraSelector.Builder()
.requireLensFacing(CameraSelector.LENS_FACING_BACK)
.build()
try {
// Unbind any previous use cases before binding new use cases
cameraProvider.unbindAll()
// Bind the camera use cases to the cameraProvider
cameraProvider.bindToLifecycle(
this, cameraSelector, preview)
} catch (exc: Exception) {
Log.e(TAG, "Use case binding failed", exc)
}
}, ContextCompat.getMainExecutor(this))
}
```
在上面的代码中,我们首先获取一个 ProcessCameraProvider 对象,并将其绑定到预览视图 PreviewView 上。然后,我们创建一个 Preview 对象,并设置它的 SurfaceProvider 为 PreviewView 的 surfaceProvider。接下来,我们创建一个 CameraSelector 对象,用于选择要使用的相机。在最后的 try-catch 块中,我们使用 cameraProvider.bindToLifecycle() 方法将 Preview 和 CameraSelector 对象绑定到相机。最后,我们捕获任何异常并记录错误日志。
4. 在 AndroidManifest.xml 文件中添加以下权限:
```
<uses-permission android:name="android.permission.CAMERA" />
```
这些步骤完成后,您就可以成功使用 CameraX 调用系统相机了。
阅读全文