Google Android
在Camera2
的基础上再开发了CameraX
,用于解决以往Camera/Camera2
配置繁杂的问题,力求做到开发者的开箱即用体验,本篇在Android Codelab
的基础上,加入了少数注释,力求代码的清晰易懂
Android官方提供的相关指南
准备工作
创建一个新项目
- 使用
Android Studio
菜单,新建项目并在收到系统提示时选择Empty Activity
(空Activity
) - 下一步,将应用命名为
CameraX App
。确保将语言设置为Kotlin
、将最低API
级别设为21
(对于CameraX
,这是所需的最低级别),确保AndroidX
组件相关设置打开
添加Gradle
依赖项
- 打开
build.gradle(Module: app)
文件并将CameraX
依赖项添加到应用Gradle
文件中的dependencies
部分内:
1 | kotlin复制代码// CameraX core library using the camera2 implementation |
CameraX
需要用到Java 8
中的一些方法,因此我们需要对编译选项进行相应设置。 在android
块末尾,紧跟buildTypes
的位置添加以下内容:
1 | kotlin复制代码compileOptions { |
- 在弹出的消息中选择
Sync Now
,把在build gradle中配置的更改进行同步 - 配置成功的build.gradle应该如下所示:
1 | kotlin复制代码plugins { |
AndroidManifest
配置
- 添加用于确保设备配备有相机的
android.hardware.camera.any
。指定.any
,用以表示相机可以是前置摄像头或后置摄像头
如果您使用不带
.any
的android.hardware.camera
,则在您使用没有后置摄像头的设备(例如,大多数 Chromebook)的情况下,此类将无法工作。在第二行中添加对于该相机的访问权限。
1 | xml复制代码<?xml version="1.0" encoding="utf-8"?> |
注意
- 在
Codelab
编写教程时采用了kotlin-android-extensions
,但如今其已经被弃用,故文中需要使用控件处都使用findViewById
代替,在github
上Android
团队发布的用例中,已经采用了更轻量级的ViewBinding
- 如果
Sync Now
过慢,考虑把源更改为阿里源,在目前该文章编写版本的Android Studio(2022.2.1)
中,仓库配置源的设置已更改至settings.gradle
,配置成功文件如下所示:
1 | kotlin复制代码pluginManagement { |
项目实现
创建取景器布局
- 创建一个
MainActivity
,并在layout/activity_main.xml
布局文件中,填入以下代码
1 | xml复制代码<?xml version="1.0" encoding="utf-8"?> |
MainActivity
的基本实现
- 定义所需常量
1 | kotlin复制代码package com.example.cameraxdemo |
- 申请权限
1 | kotlin复制代码... |
- 初始化图片输出文件夹
1 | kotlin复制代码... |
- 初始化线程池
1 | kotlin复制代码... |
- 运行代码,界面应如下所示
实现预览功能
在相机应用中,用户可借助取景器预览他们要拍摄的照片。您可以使用
CameraX
Preview
类实现取景器功能。如要使用Preview
,您首先需要定义配置,然后使用该配置创建用例的实例。所生成的实例是您要绑定到CameraX
生命周期的内容。
1 | kotlin复制代码private fun startCamera() { |
- 运行,此时的预览效果
拍摄照片并保存
takePhoto()
的实现
1 | kotlin复制代码//此处变量声明可在onCreate()前那些变量声明处一起编写 |
startCamera()
中保存图片设置
1 | kotlin复制代码private fun startCamera() { |
- 运行应用,即可正常拍摄照片并保存
完整代码
1 | kotlin复制代码package com.mobilescanner.cameraxdemo |
本文转载自: 掘金