当前位置: 首页 > news >正文

Android 的CameraX的使用(配置,预览,拍照,图像分析,录视频)

Android Studio 版本号:2024.1.2

CameraX是Jetpack系列中的一个库,它基于Camera2 API构建,但提供了更高层次的抽象。

CameraX 三大核心用例: Preview预览 ,ImageCapture拍照和 VideoCapture录视频

一、创建项目,进行环境配置

CameraX 需要一些属于 Java 8 的方法,因此我们需要相应地设置编译选项。在 android 代码块的末尾,紧跟在 buildTypes 之后,有以下配置:

使用 ViewBinding,因此请使用以下代码(在 android{} 代码块末尾)启用它:

buildFeatures {viewBinding = true
}

 CameraXApp.app 模块的build.gradle文件中添加CameraX依赖

   // CameraX 核心库val cameraVersion = "1.3.0"implementation("androidx.camera:camera-core:${cameraVersion}")implementation("androidx.camera:camera-camera2:${cameraVersion}")// 如果需要使用生命周期集成implementation("androidx.camera:camera-lifecycle:${cameraVersion}")// 如果需要视图组件 (PreviewView)implementation("androidx.camera:camera-view:${cameraVersion}")// 视频录制专用库implementation("androidx.camera:camera-video:${cameraVersion}")// 如果需要扩展功能 (如 HDR、夜间模式等)implementation("androidx.camera:camera-extensions:${cameraVersion}")

 因为用到了ConstraintLayout布局,所以也要引入依赖

implementation("androidx.constraintlayout:constraintlayout:2.1.4")

最后点击 Sync Now,我们就可以在应用中使用 CameraX 了

 二、创建界面布局

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><androidx.camera.view.PreviewViewandroid:id="@+id/myCameraView"android:layout_width="match_parent"android:layout_height="match_parent" /><Buttonandroid:id="@+id/image_take_photo_button"android:layout_width="110dp"android:layout_height="110dp"android:layout_marginBottom="50dp"android:layout_marginEnd="50dp"android:elevation="2dp"android:text="拍照"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintEnd_toStartOf="@id/vertical_centerline" /><Buttonandroid:id="@+id/video_record_button"android:layout_width="110dp"android:layout_height="110dp"android:layout_marginBottom="50dp"android:layout_marginStart="50dp"android:elevation="2dp"android:text="录视频"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintStart_toEndOf="@id/vertical_centerline" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/vertical_centerline"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"app:layout_constraintGuide_percent=".50" /></androidx.constraintlayout.widget.ConstraintLayout>

三、在AndroidManifest.xml中添加权限声明

<!--    确保设备配有相机,指定 .any 表示它可以是前置摄像头,也可以是后置摄像头-->
<!--    如果您在未指定 .any 的情况下使用 android.hardware.camera,并且您的设备未配有后置摄像头,那么相机将无法正常运行--><uses-feature android:name="android.hardware.camera.any" />
<!--    添加对该相机的使用权限--><uses-permission android:name="android.permission.CAMERA" />
<!--    录制音频也需要麦克风权限--><uses-permission android:name="android.permission.RECORD_AUDIO" />
<!--    存储空间写入权限--><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"android:maxSdkVersion="28" />

四、代码中动态申请权限

import android.os.Bundle
import androidx.activity.ComponentActivity
import com.dcy.cameraxapp.databinding.ActivityMainBinding
import android.Manifest
import android.content.pm.PackageManager
import android.os.Build
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompatclass MainActivity : ComponentActivity() {private lateinit var viewBinding: ActivityMainBindingoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)viewBinding = ActivityMainBinding.inflate(layoutInflater)setContentView(viewBinding.root)//请求相机权限if (allPermissionsGranted()) {startCamera()} else {ActivityCompat.requestPermissions(this, REQUIRED_PERMISSIONS, REQUEST_CODE_PERMISSIONS)}}private fun startCamera() {}private fun allPermissionsGranted() = REQUIRED_PERMISSIONS.all {ContextCompat.checkSelfPermission(baseContext, it) == PackageManager.PERMISSION_GRANTED}override fun onDestroy() {super.onDestroy()}companion object {private const val TAG = "CameraXApp"private const val FILENAME_FORMAT = "yyyy-MM-dd-HH-mm-ss-SSS"private con
http://www.dtcms.com/a/320528.html

相关文章:

  • Harbor 企业级实战:单机快速上手 × 高可用架构搭建 × HTTPS安全加固
  • 音视频直播全链路技术手册:核心术语与实战应用解析
  • Flink的窗口
  • LangChain4j终极指南:Spring Boot构建企业级Agent框架
  • 双目标定中旋转矩阵参数应用及旋转角度计算(聚焦坐标系平行)
  • 三方相机问题分析七:【datespace导致GPU异常】facebook 黑块和Instagram花图问题
  • Linux Shell:Nano 编辑器备忘
  • 以下是使用这款ePub编辑器将指定章节转换为TXT文本文档的操作方法
  • (数据结构)链表
  • Android 安全编程:Kotlin 如何从语言层保障安全性
  • Kotlin反射
  • HarmonyOS SDK助力讯飞听见App能力建设
  • 高德地图地理编码 逆地理编码全解析:地址和坐标的双向转换实战
  • HarmonyOS 设备自动发现与连接全攻略:从原理到可运行 Demo
  • 深入理解 robots.txt:网站与搜索引擎的 “沟通协议”
  • DataFun联合开源AllData社区和开源Gravitino社区将在8月9日相聚数据治理峰会论坛
  • 控制建模matlab练习12:线性状态反馈控制器-①系统建模
  • Ideogram:优秀的在线AI绘画平台
  • 人工智能基础知识笔记十五:文本分块(Chunk)
  • 芯伯乐XBL6019 60V/5A DC-DC升压芯片的优质选择
  • 新手向:Python实现图片转ASCII艺术
  • Custom SRP - Directional Shadows
  • 【0基础3ds Max】主工具栏介绍(上)
  • 论文reading学习记录7 - daily - ViP3D
  • 3D TOF 视觉相机:工业视觉的破局者,重塑视觉感知的未来
  • Cesium 模型3dtiles压平,任意多面压平,无闪烁
  • ETL流程详解:从概念到实战案例一次讲透
  • 宝龙地产债务化解解决方案二:基于资产代币化与轻资产转型的战略重构
  • OpenAI 最新开源模型 gpt-oss (Windows + Ollama/ubuntu)本地部署详细教程
  • 适用于在线3D测量和检测的3D激光轮廓仪