java 点击按钮使用CameraX启动系统相机进行拍照
时间: 2024-01-22 16:20:59 浏览: 132
使用 CameraX 启动系统相机进行拍照的步骤如下:
1. 添加 CameraX 的依赖库,在 app 模块的 build.gradle 文件中添加以下代码:
```
dependencies {
def camerax_version = "1.1.0-alpha06"
implementation "androidx.camera:camera-core:$camerax_version"
implementation "androidx.camera:camera-camera2:$camerax_version"
}
```
2. 添加相机权限,在 AndroidManifest.xml 文件中添加以下代码:
```
<uses-permission android:name="android.permission.CAMERA" />
```
3. 在布局文件中添加一个按钮,用于触发拍照事件:
```
<Button
android:id="@+id/btn_take_photo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Take Photo" />
```
4. 在 Activity 或 Fragment 中获取 CameraX 实例,并在按钮点击事件中启动相机进行拍照:
```
private lateinit var camera: Camera
private var imageCapture: ImageCapture? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 初始化 CameraX 实例
camera = CameraX.bindToLifecycle(this)
// 获取 ImageCapture 实例
imageCapture = ImageCapture.Builder().build()
// 监听拍照按钮点击事件
btn_take_photo.setOnClickListener {
takePhoto()
}
}
private fun takePhoto() {
// 创建保存图片的文件
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)
Toast.makeText(this@MainActivity, "Photo saved: $savedUri", Toast.LENGTH_SHORT).show()
}
override fun onError(exception: ImageCaptureException) {
// 拍照出错的回调
Toast.makeText(this@MainActivity, "Photo capture failed: ${exception.message}", Toast.LENGTH_SHORT).show()
}
})
}
```
这样,点击按钮就可以启动系统相机进行拍照,并将图片保存到指定的文件中。注意,需要在 Android 5.0 及以上的设备上运行才能使用 CameraX。
阅读全文