【Android】设备操作

本文介绍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.xdnf.cn/news/1554792.html

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

相关文章

【韩顺平Java笔记】第7章:面向对象编程(基础部分)【214-226】

文章目录 214. 递归解决什么问题215. 递归执行机制1216. 递归执行机制2217 递归执行机制3217.1 阶乘218. 递归执行机制4219. 斐波那契数列220. 猴子吃桃221. 222. 223. 224. 老鼠出迷宫1,2,3,4224.1 什么是回溯 225. 汉诺塔226. 八皇后 214. 递归解决什么问题 简单的说: 递归就…

[Meachines] [Easy] Sea WonderCMS-XSS-RCE+System Monitor 命令注入

信息收集 IP AddressOpening Ports10.10.11.28TCP:22,80 $ nmap -p- 10.10.11.28 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.11 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 3072 e3:54:…

Python3使用cv_bridge转换ROS的image信息

0. Preface 现在很多新的图片处理model都是基于python3的,而ROS还是2.7的,要结合起来用不可避免有很多问题,以下以接收ROS image为例子 以下方法需要用的anaconda,安装方法有很多blog分享 1. Preparation 以下是python3接收ima…

解锁 SDKMAN!:最新教程与全面简介

SDKMAN! 是一个用于管理开发工具的软件开发工具包管理器,特别适用于 JVM 生态系统。 官网地址:https://sdkman.io/ 多版本管理:允许用户在同一台机器上安装和管理多个版本的 SDK(如 Java、Groovy、Scala、Kotlin 等)。 简单安装:通过简单的命令行命令可以安装、更新和卸载…

15分钟学 Python 第36天 :Python 爬虫入门(二)

Python 爬虫入门:环境准备 在进行Python爬虫的学习和实践之前,首先需要准备好合适的开发环境。本节将详细介绍Python环境的安装、必要库的配置、以及常用工具的使用,为后续的爬虫编写奠定坚实的基础。 1. 环境准备概述 1.1 为什么环境准备…

OpenAI为ChatGPT推出Canvas功能,对标Claude Artifacts!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工…

Pikachu-File Inclusion-远程文件包含

远程文件包含漏洞 是指能够包含远程服务器上的文件并执行。由于远程服务器的文件是我们可控的,因此漏洞一旦存在,危害性会很大。但远程文件包含漏洞的利用条件较为苛刻;因此,在web应用系统的功能设计上尽量不要让前端用户直接传变…

多模态—文字生成图片

DALL-E是一个用于文字生成图片的模型,这也是一个很好思路的模型。该模型的训练分为两个阶段: 第一阶段:图片经过编码器编码为图片向量,当然我们应该注意这个过程存在无损压缩(图片假设200*200,如果用one-h…

Vue2基础指令

Vue2基础指令 Vue使用核心步骤&#xff08;4步&#xff09;&#xff1a; 准备容器引包&#xff08;官网&#xff09; — 开发版本/生产版本创建Vue实例 new Vue()指定配置项&#xff0c;渲染数据 el:指定挂载点data提供数据 <body><div id"app"><…

国外透明代理IP解析:匿名性的全貌

网络世界中&#xff0c;透明代理IP是一个广受关注的话题。究竟什么国外透明代理IP&#xff1f;以及它的匿名性如何&#xff1f;本文将深入解析透明代理IP的定义及其匿名性&#xff0c;为您呈现一个清晰的认识。 1. 概念 透明代理IP是指在进行网络请求时&#xff0c;客户端&am…

黑马JavaWeb开发跟学(九)MyBatis基础操作

黑马JavaWeb开发跟学九.MyBatis基础操作 1. Mybatis基础操作1.1 需求1.2 准备1.3 删除1.3.1 功能实现1.3.2 日志输入1.3.3 预编译SQL1.3.3.1 介绍1.3.3.2 SQL注入1.3.3.3 参数占位符 1.4 新增1.4.1 基本新增1.4.2 主键返回 1.5 更新1.6 查询1.6.1 根据ID查询1.6.2 数据封装1.6.…

【MySQL 08】复合查询

目录 1.准备工作 2.多表查询 笛卡尔积 多表查询案例 3. 自连接 4.子查询 1.单行子查询 2.多行子查询 3.多列子查询 4.在from子句中使用子查询 5.合并查询 1.union 2.union all 1.准备工作 如下三个表&#xff0c;将作为示例&#xff0c;理解复合查询 EMP员工表…

MongoDB-aggregate流式计算:带条件的关联查询使用案例分析

在数据库的查询中&#xff0c;是一定会遇到表关联查询的。当两张大表关联时&#xff0c;时常会遇到性能和资源问题。这篇文章就是用一个例子来分享MongoDB带条件的关联查询发挥的作用。 假设工作环境中有两张MongoDB集合&#xff1a;SC_DATA&#xff08;学生基本信息集合&…

【Java】JAVA知识总结浅析

Java是一门功能强大的编程语言&#xff0c;广泛应用于多个领域。Java的编程思想&#xff0c;包括面向过程和面向对象编程&#xff0c;Java的发展历史&#xff0c;各版本的特点&#xff0c;JVM原理&#xff0c;数据类型&#xff0c;Java SE与Java EE的区别&#xff0c;应用场景&…

Colorize: 0 variables Colorize is not activated for this file. VsCode

问题情况 解决步骤 1.找到setting.json文件 2.输入以下代码&#xff0c;保存setting.json文件 "colorize.languages": ["css", "javascript", "sass", "less", "postcss", "stylus", "xml"…

小程序 uniapp+Android+hbuilderx体育场地预约管理系统的设计与实现

目录 项目介绍支持以下技术栈&#xff1a;具体实现截图HBuilderXuniappmysql数据库与主流编程语言java类核心代码部分展示登录的业务流程的顺序是&#xff1a;数据库设计性能分析操作可行性技术可行性系统安全性数据完整性软件测试详细视频演示源码获取方式 项目介绍 用户 注册…

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

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

DMA 正点原子版

就是介绍一下dma&#xff0c;只能内存到外设&#xff0c;外设到内存&#xff0c;内存到内存&#xff0c;不能外设到外设这样进行数据传输 这个是 可以看这个表来查&#xff0c;哪个dma的哪个通道用来传输什么数据&#xff0c;这个是芯片固定好的&#xff0c;只能看表查&#xf…

汉代儒家对道家《老子》修改为儒家《道德经》

汉代儒家对道家《老子》修改为儒家《道德经》 汉代对《老子》文本的改造和诠释。在汉代&#xff0c;由于政治、社会和文化背景的变化&#xff0c;许多先秦典籍&#xff0c;包括《老子》&#xff0c;都经历了不同程度的修改和重新解释。这些改造不仅反映了当时的思想潮流&#…

grep的使用

cat .\test.log |grep 1 cat .\test.log |grep [23] cat .\test.log |grep [123\|124] cat .\test.log |grep 123\|124 cat .\test.log |grep -e 2.*d