安卓手机APP开发__媒体开发部分__分享声音的输入

安卓手机APP开发__媒体开发部分__分享声音的输入

目录

概述

安卓10之前的版本的行为

安卓10的行为

共享场景

小助手+普通的APP  

有可读取权的服务 + 普通的APP

两个普通的APP

语音电话 + 普通的APP


概述

声音的输入通常来自于内嵌的麦克风,还有外置的麦克网,或者是一个附加到一个设备上的
一个音频接口.声音输入也能来自于一个电话的会话.

有时候,两个或者是多个APP可能都要捕捉同一个音频输入.他们可能是执行不同的任务.
例如,一些APP接收声音可能是录制,像一个简单的语音录音机,然而,其它的APP可能是监听,
像是谷歌的小助手或者是一个可读取性的设备,为了对语音指令进行响应.

在每一个情况下,这些APP都要接收音频输入.这里,我们使用的捕捉这个术语,是无关于一个
是在录制还是仅在监听.

如果两个或者多个APP要同时捕捉音频,这有一个问题,是从同一个音频源向多个目标进行传递
声音信号的问题.这里描述了安卓系统如何在捕捉音频信号的多个APP之间共享音频输入的方法.

安卓10之前的版本的行为

安卓10之前的时候,输入的音频流在一个时间点仅能被一个APP捕捉信号.如果
一些APP准备录制或者是监听音频时,你的APP能创建一个音频记录的对象,
但是当你调用音频记录的开始录制的方法时,将返回一个错误,录制并没有开始.

这个规则的一个例外是当一个有特权的APP(像谷歌小助手,或者是一个有读取权的服务)
有权限android.permission.CAPTURE_AUDIO_HOTWORD,并且使用的音频源的类型是HOTWORD
在这个情况下,其它的APP能开始录制.当发生特权APP中止时,一个新的APP开始捕捉输入.

在安卓9中添加一个更改:仅在前台运行中的APP能够捕捉音频输入.当一个APP没有一个前台的服务
或者是前台的用户界面组件开始捕捉信号时,APP继续运行,但是仅能接收到静默的声音状态,
甚至它是唯一的APP在那个时候捕捉音频.

安卓10的行为

安卓10的行为是"先来,先服务".一旦一个APP开始捕捉音频了,没有其它的APP
能读取音频的输入了,一直到APP捕捉音频的操作停止了.

安卓10强调了一个优先权的模式,在运行中的APP之间,能够切换输入的音频流.
在绝大部分情况下,如果一个新的APP要求音频输入,先前捕捉信号的APP会继续
运行,但接收到的是静音.在一些情况下,系统能继续向各个APP投递音频.
各种共享场景在下面做解释.

这个模式与音频焦点处理多个APP播放的方式是类似的.然而,音频焦点是被
程序化的请求来管理的,这里的输入模式的切换是基于优先级的策略,当一个新的
APP开始捕捉音频时自动切换的.

对于捕捉音频的目的,安卓区分了两类的APP:
由用户安装的普通的APP
在设备上预安装的特权APP.这包括了谷歌小助手和所有的有读取权的服务.

此外,一个APP被区别对待,看的是它是否使用了"隐私敏感的"音频源
CAMCORDER 或者是 VOICE_COMMUNICATION.

使用和共享音频输入的优先级规则如下:

特权APP比普通的APP有更高的优先权.
有可见的前台用户界面的APP比后台的APP有更高的优先权.
从一个隐私敏感的音频源捕捉音频的APP比没有从隐私敏感的
音频源捕捉音频的APP的优先权更高

两个普通权限的APP不能同时捕捉音频。
在一些情况下,一个有特权的APP能和其它的APP共享音频输入。
如果两个后台APP有相同的捕捉音频的优先级,那么后一个APP开始捕捉音频时,
它的优先级更高一点

共享场景

当两个APP试图捕捉音频时,它们都可能接收到输入的信号,或者是它们中的一个可能接收到静音。

这里有四个主要的场景:

    小助手+普通的APP
    有可读取权的服务 + 普通的APP
    两个普通的APP
    语音电话 + 普通的APP

小助手+普通的APP  

小助手是一个特权的APP,因为它是一个预安装的APP,并且它有角色RoleManager.ROLE_ASSISTANT
任何其它的预安装的APP,有这个角色的APP,也有类似的待遇。

安卓共享音频输入,是基于如下的这些规则:

小助手能接收到音频(无论它在前台还是在后台)只要不是其它的APP
正在捕捉隐私敏感的音频源就行。

如果小助手没有在屏幕的顶层上有可见的用户界面组件的话,其它APP可以接收音频输入。

注意的是,当小助手在后台,其它的APP没有从隐私敏感的音频源捕捉信号时,两者都可以接收
音频输入。

有可读取权的服务 + 普通的APP

一个有可读取权的服务,需要一个严格的声明。
安卓共享音频输入,是基于如下的这些规则:

如果服务的用户界面在屏幕的顶层可见,服务和APP都接收音频输入。
这个行为提供了控制语音电话或者是有语音指令的视频捕捉的功能。

如果服务没在屏幕的顶层可见,这种情况就类似于两个普通的APP的情况了。


两个普通的APP

当两个APP在并发地捕捉信号时,仅有一个APP接收到了音频,另一个是静音。
安卓共享音频输入,是基于如下的这些规则:

如果没有APP是隐私敏感的,用户界面在屏幕顶层可见的APP,来接收音频。
如果没有APP有用户界面,开始捕捉音频的APP,现在更可能在接收音频。
如果一个APP是隐私敏感的,它接收音频,另一个不接收音频。即使是另一个
有用户界面在屏幕顶层可见,或者是它刚才还在接收音频。
如果两个APP都是隐私敏感的,开始捕捉音频的APP,现在更可能在接收音频,而另一个接收静音。


语音电话 + 普通的APP

一个语音电话是活动的,如果音频模式,由AudioManager.getMode()返回的是
MODE_IN_CALL 或者是 MODE_IN_COMMUNICATION.

安卓共享音频输入,是基于如下的这些规则:

电话总是在接收音频。
如果APP是有可读取性权限的服务时,它能够捕捉音频。
如果一个APP是一个预安装的特权APP,并且有权限CAPTURE_AUDIO_OUTPUT时
这个APP能够捕捉语音电话的音频。

为了捕捉语音电话的上连接,下连接,或者是两者都有,APP必须指定
音频源是MediaRecorder.AudioSource.VOICE_UPLINK 或者 MediaRecorder.AudioSource.VOICE_DOWNLINK, 并且/或者是设备AudioDeviceInfo.TYPE_TELEPHONY.

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

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

相关文章

【C++】深入剖析C++11中右值引用和左值引用

目录 一、左值引用 && 右值引用 二、左值引用于右值引用的比较 三、 右值引用使用场景和意义 1、函数返回值 ①移动赋值 ②移动构造 2、STL容器插入接口 ​3、完美转发 一、左值引用 && 右值引用 传统的C语法中就有引用的语法,而C11中新增了…

【简单介绍下Lisp的学习历程】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

计算机网络 3.1网络的拓扑结构

第三章 网络技术基础 第一节 网络的拓扑结构 一、认识拓扑结构 1.定义: ①网络节点和链路的几何图形; ②网络中网络单元的地理分布和互联关系的几何构型; ③通信子网的拓扑结构。 2.三要素:可靠性、扩充性、费用高低。 3.影…

react 子组件调用父组件方法,获取的数据不是最新值

目录 原因解决方法方法一、去掉 useCallback, 这样每次父组件触发刷新,就会刷新子组件方法二、或者通过监听 val,val 值改变来刷新函数方法三、在父组件中,把 val 作为 key 值,每次 val 变化强制触发更新 出现问题的代…

Mybatis之Sqlsession、Connection和Transaction三者间的关系

前言 最近在看Mybatis的源码,搜到这篇文章Sqlsession、Connection和Transaction原理与三者间的关系,debug之后发现有不少疑惑,于是按照原文整理了一下,记录下debug中的一些困惑点。 对于我们开发来讲,不管跟任何关系…

django搭建一个AI博客进行YouTube视频自动生成文字博客

文章目录 一、生成Django框架二、项目代码(前端)1、编写前端代码(正文界面)1.1、生产html框架1.2、添加live preview扩展1.3、更改title元素中文本1.4、添加CDN(CSS)样式链接1.5、nav标签1.6、在body标签中…

Python | Leetcode Python题解之第66题加一

题目: 题解: class Solution:def plusOne(self, digits: List[int]) -> List[int]:n len(digits)for i in range(n - 1, -1, -1):if digits[i] ! 9:digits[i] 1for j in range(i 1, n):digits[j] 0return digits# digits 中所有的元素均为 9retu…

手撸Mybatis(三)——收敛SQL操作到SqlSession

本专栏的源码:https://gitee.com/dhi-chen-xiaoyang/yang-mybatis。 引言 在上一章中,我们实现了读取mapper配置并构造相关的mapper代理对象,读取mapper.xml文件中的sql信息等操作,现在,在上一章的基础上&#xff0c…

深度学习:基于TensorFlow、Keras,使用长短期记忆神经网络模型(LSTM)对Microsoft股票进行预测分析

前言 系列专栏:机器学习:高级应用与实践【项目实战100】【2024】✨︎ 在本专栏中不仅包含一些适合初学者的最新机器学习项目,每个项目都处理一组不同的问题,包括监督和无监督学习、分类、回归和聚类,而且涉及创建深度学…

等保测评考试培训题

等保2.0培训考试题目 一、网络安全法第几条,规定国家实行网络安全等级保护制度。 A、第五条 B、第十条 C、第十三条 D、第二十一条 二、等级保护有几个安全保护级别? A、3个 B、4个 C、5个 D、6个 三、什么样的系统可以作为定级对象&#…

UNIAPP小程序从入门到精通

第一章> 1、如何创建项目 2、项目的基本结构 3、页面组成(wxss可以不用) 4、组件的使用 5、协同开发与发布 第二章> 6、WXML页面结构渲染 7、style样式美化 8、a…

分享我的github仓库

这是一个由现代C编写的小型、学习性质的服务器框架,包含压缩,序列化,IO调度,Socket封装,文件配置,日志库等多个完整自研模块,欢迎到我的仓库阅读代码和安装体验,期待任何的建议和反馈…

Docker 加持的安卓手机:随身携带的知识库(一)

这篇文章聊聊,如何借助 Docker ,尝试将一台五年前的手机,构建成一个随身携带的、本地化的知识库。 写在前面 本篇文章,我使用了一台去年从二手平台购入的五年前的手机,K20 Pro。 为了让它能够稳定持续的运行&#xf…

C++, 简单 http 下的 POST 和 Get

#pragma once #include <Windows.h> #include <winsock.h> #include <sstream> #include <iostream> #pragma comment(lib,"ws2_32.lib")class WinHttp { public:WinHttp(){//此处一定要初始化一下&#xff0c;否则gethostbyname返回一直为空…

如何从Mac电脑恢复任何删除的视频

Microsoft Office是包括Mac用户在内的人们在世界各地创建文档时使用的最佳软件之一。该软件允许您创建任何类型的文件&#xff0c;如演示文稿、帐户文件和书面文件。您可以使用 MS Office 来完成。所有Microsoft文档都可以在Mac上使用。大多数情况下&#xff0c;您处理文档&…

手搓堆(C语言)

Heap.h #pragma once#include <stdio.h> #include <stdlib.h> #include <assert.h> #include <stdbool.h> #include <string.h> typedef int HPDataType; typedef struct Heap {HPDataType* a;int size;int capacity; }Heap;//初始化 void Heap…

node.js中的fs模块,读写语法讲解

本文分享node.js的入门知识&#xff0c;使用 fs 模块封装的方法读写文件内容 node中的fs 模块&#xff1a;封装了与本机文件系统进行交互的&#xff0c;方法和属性&#xff0c;使用语法如下&#xff1a; 1、加载 fs 模块&#xff0c;得到 fs 对象 const fs require(fs) 2、…

软件工程习题答案2024最新版

习题一答案 一、选择题 软件的主要特性是(A B C)。 A) **无形 **B) 高成本 C) **包括程序和文档 ** D) 可独立构成计算机系统 软件工程三要素是(B)。 A) 技术、方法和工具 B) 方法、工具和过程 C) 方法、对象和类 D) 过程、模型、方法 包含风险分析的软件工程模型是(A)…

Java注解处理器:自定义注解的自动化处理

引言 在Java编程中&#xff0c;注解&#xff08;Annotation&#xff09;是一种重要的元数据&#xff0c;它为代码提供了额外的信息。注解处理器&#xff08;Annotation Processor&#xff09;是Java编译过程中的一部分&#xff0c;它可以在编译时期读取注解信息并执行特定的处…

深度学习之基于Matlab BP神经网络烟叶成熟度分类

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 烟叶的成熟度是评估烟叶品质的重要指标之一&#xff0c;它直接影响着烟叶的口感、香气和理化特性。传…