android 点击按钮调用CameraX系统相机拍照
时间: 2023-10-13 22:04:14 浏览: 112
可以按照以下步骤来实现:
1. 在 `build.gradle` 文件中添加依赖:
```
implementation "androidx.camera:camera-core:1.0.0"
implementation "androidx.camera:camera-camera2:1.0.0"
```
2. 在布局文件中添加一个按钮:
```
<Button
android:id="@+id/btn_take_picture"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Take Picture" />
```
3. 在 Activity 或 Fragment 中初始化 CameraX:
```kotlin
private lateinit var imageCapture: ImageCapture
private fun startCamera() {
val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
cameraProviderFuture.addListener({
val cameraProvider = cameraProviderFuture.get()
val preview = Preview.Builder().build().also {
it.setSurfaceProvider(viewFinder.surfaceProvider)
}
imageCapture = ImageCapture.Builder().build()
val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
try {
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(this, cameraSelector, preview, imageCapture)
} catch (e: Exception) {
Log.e(TAG, "Use case binding failed", e)
}
}, ContextCompat.getMainExecutor(this))
}
```
这里我们使用了 CameraX 的 `ImageCapture` 用例,该用例可以用于拍照。
4. 在按钮点击事件中触发拍照操作:
```kotlin
btn_take_picture.setOnClickListener {
val file = File(externalMediaDirs.first(), "${System.currentTimeMillis()}.jpg")
val outputOptions = ImageCapture.OutputFileOptions.Builder(file).build()
imageCapture.takePicture(outputOptions, ContextCompat.getMainExecutor(this), object : ImageCapture.OnImageSavedCallback {
override fun onImageSaved(outputFileResults: ImageCapture.OutputFileResults) {
val savedUri = Uri.fromFile(file)
// TODO: 处理保存成功后的操作
}
override fun onError(exception: ImageCaptureException) {
Log.e(TAG, "Photo capture failed: ${exception.message}", exception)
}
})
}
```
在这里我们将拍摄的照片保存到了外部存储器中,并且在保存成功后得到了保存的文件路径。
5. 添加相机权限:
```xml
<uses-permission android:name="android.permission.CAMERA" />
```
并在运行时动态请求相机权限。
以上是使用 CameraX 系统相机拍照的基本步骤,你可以根据需要进行修改和优化。
阅读全文