【Android】设备操作

news2024/10/5 6:25:19

本文介绍App开发常用的一些设备操作,主要包括如何使用摄像头进行拍照、如何使用麦克风进行录音并结合摄像头进行录像、如何播放录制好的音频和视频、如何使用常见传感器实现业务功能、如何使用定位功能获取位置信息、如何利用短距离通信技术实现物联网等。

摄像头

本节介绍利用摄像头实现相机功能的办法,首先对表面视图SurfaceView的用法进行说明,演示如何运用相机类Camera结合表面视图完成拍照功能(含单拍和连拍)。然后对表面视图的升级版——纹理视图TextureView的用法进行阐述,并演示如何在新版Camera2架构中结合纹理视图完成拍照功能(含单拍和连拍)。最后介绍了与设备操作有关的运行时权限管理。

表面视图SurfaceView

Android的绘图机制是由UI线程在屏幕上绘图,一般情况下不允许其他线程直接做绘图操作。这个机制在处理简单页面时没什么问题,因为普通页面不会频繁且大面积地绘图,但是该机制在处理复杂多变的页面时会产生问题,比如时刻变化着的游戏界面、拍照或录像时不断变换着的预览界面就会导致UI线程资源堵塞,即界面卡死的状况。
表面视图SurfaceView是Android用来解决子线程绘图的特殊视图,拥有独立的绘图表面,即不与其宿主页面共享同一个绘图表面。由于拥有独立的绘图表面,因此表面视图的界面能够在一个独立线程中进行绘制,这个子线程为渲染线程。因为渲染线程不占用主线程资源,所以一方面可以实现复杂而高效的UI刷新,另一方面及时响应用户的输入事件。由于表面视图具备以上特性,因此可用于拍照和录像的预览界面,也可用于游戏的实时界面。
因为表面视图不在UI主线程绘图,无论是onDraw方法还是dispatchDraw方法都没有进行绘图操作,所以表面视图必然要通过其他途径绘图,这个途径便是内部类表面持有者SurfaceHolder外部调用SurfaceView对象的getHolder方法获得SurfaceHolder对象,然后进行预览界面的相关绘图操作。
从表面视图的转动效果可以看到,它与普通视图在处理上的区别主要有以下两点:
(1)表面视图允许开启多个线程同时进行绘图操作,而普通视图只有一个UI线程可以绘图。
(2)表面视图不会自动清空上次的绘图结果,即绘图操作是增量进行的,而普通视图在每次绘图前都会清空上次的绘图结果。

使用Camera拍照

在Android开发中,相机Camera是直接操作摄像头硬件的工具类,包括后置摄像头和前置摄像头,有以下常用方法。

  • getNumberOfCameras:获取本设备的摄像头数目。
  • open:打开摄像头,默认打开后置摄像头。如果有多个摄像头,那么open(0)表示打开后置摄像头,open(1)表示打开前置摄像头。
  • getParameters:获取摄像头的拍照参数,返回Camera.Parameters对象。setParameters:设置摄像头的拍照参数。具体的拍照参数通过调用Camera.Parameters的下列方法进行设置。
  1. setPreviewSize:设置预览界面的尺寸。
  2. setPictureSize:设置保存图片的尺寸。
  3. setPictureFormat:设置图片格式。一般使用ImageFormat.JPEG表示JPG格式。
  4. setFocusMode:设置对焦模式。取值Camera.Parameters.FOCUS_MODE_AUTO只会自动对焦一次,取值FOCUS_MODE_CONTINUOUS_PICTURE则会连续对焦。
  • setPreviewDisplay:设置预览界面的表面持有者,即SurfaceHolder对象。该方法必须在SurfaceHolder.Callback的surfaceCreated方法中调用。
  • startPreview:开始预览。该方法必须在setPreviewDisplay方法之后调用。
  • unlock:录像时需要对摄像头解锁,这样摄像头才能持续录像。该方法必须在startPreview方法之后调用。setDisplayOrientation:设置预览的角度。Android的0度在三点钟的水平位置,而手机屏幕是垂直位置,从水平位置到垂直位置需要旋转90度。
  • autoFocus:设置对焦事件。参数自动对焦接口AutoFocusCallback的onAutoFocus方法在对焦完成时触发,在此提示用户对焦完毕可以拍照了。
  • takePicture:开始拍照,并设置拍照相关事件。第一个参数为快门回调接口ShutterCallback,它的onShutter方法在按下快门时触发,通常可在此播放拍照声音,默认为“咔嚓”一声;第二个参数的PictureCallback表示原始图像的回调接口,通常无须处理直接传null;第三个参数的PictureCallback表示JPG图像的回调接口,压缩后的图像数据可在该接口中的onPictureTaken方法中获得。
  • setZoomChangeListener:设置缩放比例变化事件。缩放变化监听器OnZoomChangeListener的onZoomChange方法在缩放比例发生变化时触发。
  • setPreviewCallback:设置预览回调事件,通常在连拍时调用。预览回调接口PreviewCallback的onPreviewFrame方法在预览图像发生变化时触发。
  • stopPreview:停止预览。
  • lock:录像完毕对摄像头加锁。该方法在stopPreview方法之后调用。
  • release:释放摄像头。因为摄像头不能重复打开,所以每次退出拍照时都要释放摄像头。
纹理视图TextureView

表面视图SurfaceView在一般情况下足够使用了,但是有一些限制。因为表面视图不是通过onDraw方法和dispatchDraw方法进行绘图,所以无法使用View的基本视图方法。例如,各种视图变化方法均无法奏效,包括透明度变化方法setAlpha、平移方法setTranslation、缩放方法setScale、旋转方法setRotation等,甚至连最基础的背景图设置方法setBackground都失效了。
为了解决表面视图的不足之处,Android在4.0之后引入了纹理视图TextureView。与表面视图相比,纹理视图并没有创建一个单独的绘图表面用来绘制,可以像普通视图一样执行变换操作,也可以正常设置背景图。
下面是TextureView的常用方法。

  • lockCanvas:锁定并获取画布。
  • unlockCanvasAndPost:解锁并刷新画布。
  • setSurfaceTextureListener:设置表面纹理的监听器。该方法相当于SurfaceHolder的addCallback方法,用来监控表面纹理的状态变化事件。方法参数为SurfaceTextureListener监听器对象,需重写以下4个方法。
  1. onSurfaceTextureAvailable:在表面纹理可用时触发,可在此进行打开相机等操作。 onSurfaceTextureSizeChanged:在表面纹理尺寸变化时触发。 onSurfaceTextureDestroyed:在表面纹理销毁时触发。
  2. onSurfaceTextureUpdated:在表面纹理更新时触发。
  • isAvailable:判断表面纹理是否可用。
  • getSurfaceTexture:获取表面纹理。
使用Camera 2拍照

如同纹理视图是表面视图的升级版那样,Android在5.0之后推出了Camera的升级版——Camera 2。按照Android的官方说明,Camera 2支持以下5点新特性:
(1)支持每秒30帧的全高清连拍。
(2)支持在每帧之间使用不同的设置。
(3)支持原生格式的图像输出。
(4)支持零延迟快门和电影速拍。
(5)支持相机在其他方面的手动控制,比如设置噪音消除的级别。
Camera2在架构上做了大幅改造,原先的Camera类被拆分为多个管理类,主要有相机管理器CameraManager、相机设备CameraDevice、相机拍照会话CameraCaptureSession、图像读取器ImageReader。

传感器

本节介绍常见传感器的用法与相关应用场景,首先列举Android目前支持的传感器种类,然后对常用传感器分别进行说明,包括加速度传感器的用法和摇一摇的实现、磁场传感器的用法和指南针的实现,以及计步器、感光器、陀螺仪等其他传感器的基本用法。

传感器的种类

传感器Sensor是一系列感应器的总称,是Android设备用来感知周围环境和运动信息的工具。因为具体的感应信息依赖于相关硬件,所以虽然Android定义了众多感应器,但是并非每部手机都能支持这么多感应器,千元以下的低端手机往往只支持加速度等少数感应器。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2189446.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Armeria gPRC 高级特性 - 装饰器、无框架请求、阻塞处理器、Nacos集成、负载均衡、rpc异常处理、文档服务......

文章目录 定义一个示例高级特性装饰器概述简单案例多种装饰方式 无框架请求概述使用方式 阻塞任务处理器背景概述多种使用方式 rpc 异常统一处理使用方式更详细的异常信息 Armeria 提供 gRPC 客户端多种调用方式同步调用异步调用使用装饰器 负载均衡简单案例Armeria 提供的所有…

5G NR相关笔记

为了提供一致且准确的时序定义,NR规范了一个 基本时间单位 T c 1 / ( 480000 4096 ) , T_c1/(480 000\times 4096), Tc​1/(4800004096),所有与5GNR相关的时间的定义都被描述为这个基本时间单位的整数倍。基本时间单位 T c T_c Tc​ 因此可以看成是子载波间隔480…

10.2 Linux_进程_进程相关函数

创建子进程 函数声明如下: pid_t fork(void); 返回值:失败返回-1,成功返回两次,子进程获得0(系统分配),父进程获得子进程的pid 注意:fork创建子进程,实际上就是将父进程复制一遍作为子进程&…

【AIGC】2023-ICCV-使用 Transformer 的可扩展扩散模型

2023-ICCV-Scalable Diffusion Models with Transformers 使用 Transformer 的可扩展扩散模型摘要1. 引言2. 相关工作3. 扩散 Transformer3.1 准备工作3.2 扩散 Transformer 设计空间 4. 实验设置5. 实验5.1 最先进的扩散模型5.2 缩放模型与采样计算 6. 结论参考文献 使用 Tran…

Ubuntu24.04远程开机

近来在几台机器上鼓捣linux桌面,顺便研究一下远程唤醒主机。 本篇介绍Ubuntu系统的远程唤醒,Windows系统的唤醒可搜索相关资料。 依赖 有远程唤醒功能的路由器(当前一般都带这个功能)有线连接主机(无线连接有兴趣朋友…

PostgreSQL技术内幕13:PostgreSQL通讯协议

文章目录 0.简介1.PG通讯协议1.1 消息格式1.2 消息交互流程1.2.1 启动流程1.2.2 简单查询流程1.2.3 扩展查询1.2.3.1 pipelining 1.2.4 取消流程1.2.5 结束流程1.2.6 copy流程1.2.7 错误和通知 0.简介 之前文章对于PG的内部模块做了一些介绍,接下来对PG和外部交互的…

GS-SLAM论文阅读笔记-MGSO

前言 MGSO首字母缩略词是直接稀疏里程计(DSO),我们建立的光度SLAM系统和高斯飞溅(GS)的混合。这应该是第一个前端用DSO的高斯SLAM,不知道这个系统的组合能不能打得过ORB-SLAM3,以及对DSO会做出怎么样的改进以适应高斯地图,接下来…

【有啥问啥】SE(Squeeze-and-Excitation)架构详解

SE(Squeeze-and-Excitation)架构详解 在深度学习,特别是计算机视觉领域,卷积神经网络(CNN)的发展日新月异。为了进一步提升CNN的特征提取能力和模型性能,研究者们不断探索新的网络架构和组件。…

向量数据库|第1期|从零开始学习

向量数据库|第1期|从零开始学习 1、向量数据库中的基本概念 1.1 什么是余弦 余弦函数是一种三角函数,在直角三角形中,某个锐角的余弦为:临边与斜边的比值,如下图cosAb/c。引申到任意三角形中,即余弦定理:…

2024年7月大众点评全国酒吧前百名城市分析

在做一些城市分析、学术研究分析、商业选址、商业布局分析等数据分析挖掘时,大众点评的数据参考价值非常大,截至2024年7月,大众点评美食店铺剔除了暂停营业、停止营业后的最新数据情况分析如下。 分析研究的字段维度包括大众点评数字id、字母…

LSM6DSV16X基于MLC智能笔动作识别(3)----MEMS Studio训练数据

LSM6DSV16X基于MLC智能笔动作识别.3--MEMS Studio训练数据 概述视频教学样品申请源码下载硬件准备选择MEMS导入数据配置窗口长度和量程配置滤波器选择特征数据设备树生成决策树生成参考程序转换UCF文件 概述 MEMS-Studio是一套完整的桌面软件解决方案,专为开发嵌入…

认知杂谈98《抵御噪声干扰》

内容摘要: “能量掠夺”是指他人负面言行对我们情绪和心理状态的不良影响,使我们感到沮丧或愤怒。这种影响可能源于我们内心对自身价值认同的不坚定,以及过分在意他人的看法。 要避免能量掠夺,我们需要建立心理防线,学…

Xilinx Vitis IDE启动时失去响应的解决办法

在启动Xilinx Vitis IDE时,有时候会遇到卡死的情况,无论是直接启动还是从Vivado的菜单中启动都一样。参考Xilinx官网的解决办法:(一直到2023.1版本都是可以解决的,之后的版本没测过。) Widget (amd.com) …

Leetcode—279. 完全平方数【中等】

2024每日刷题&#xff08;169&#xff09; Leetcode—279. 完全平方数 实现代码 class Solution { public:int numSquares(int n) {vector<int> dp(n 1, n);dp[0] 0;dp[1] 1;for(int i 2; i < n; i) {for(int j 1; j * j < i; j) {dp[i] min(dp[i], dp[i -…

Oracle中ADD_MONTHS()函数详解

文章目录 前言一、ADD_MONTHS()的语法二、主要用途三、测试用例总结 前言 在Oracle数据库中&#xff0c;ADD_MONTHS()函数用于在日期中添加指定的月数。 一、ADD_MONTHS()的语法 ADD_MONTHS(date, n) 其中&#xff0c;date是一个日期值&#xff0c;n是一个整数值&#xff0c…

C语言高阶【2】--动态内存管理【2】--柔性数组(这是个全新的知识点,不想了解一下吗?)

本章概述 柔性数组总结C/C中程序内存划分彩蛋时刻&#xff01;&#xff01;&#xff01;&#xff01; 柔性数组 数组这个东西&#xff0c;我想大家应该都不陌生了吧。但是&#xff0c;柔性数组这个东西可能你是第一次听说。 柔性数组概念&#xff1a;在C99之前是没这个东西的…

基于Flux的文生高清图片

Flux模型生成的图片画质极佳&#xff0c;改进修复了手的问题&#xff0c;支持字体生成和排版&#xff0c;训练参数大&#xff0c;风格多样&#xff0c;分辨率弹性好&#xff0c;embedding通用性好&#xff0c;不需要输入负面提示词。 安装ComfyUI ComfyUI下载安装 下载和配置…

计算机网络:计算机网络概述 —— 网络拓扑结构

文章目录 网络拓扑总线型拓扑特点缺陷 星型拓扑特点缺陷 环型拓扑特点缺陷 网状型拓扑优点缺陷 树型拓扑特点缺陷 网络拓扑 网络拓扑指的是计算机网络中节点&#xff08;计算机、交换机、路由器等&#xff09;之间物理或逻辑连接的结构。网络拓扑定义了节点之间的布局、连接方…

方法重载(Overload)

前言 在前面的学习中&#xff0c;我们学到了重写(Override),这里我们主要进行重载(Overload)的介绍&#xff0c;同时对重写和重载的区别进行分析。 1. 重载(Overload) #方法重载 在同一个类中定义多个同名但参数不同的方法。我们称方法与方法之间构成方法重载 在Java中&…

【宽搜】1. 层序遍历模板讲解

题目描述 题目链接&#xff1a;N叉树的层序遍历 层序遍历流程 请仔细阅读下图&#xff1a; 根据上图的流程&#xff0c;下面再明确几个问题&#xff1a; 1. 为什么要使用队列&#xff1f; 队列是先进先出的数据结构&#xff0c;在数的层序遍历中&#xff0c;需要先将节点p…