近年来手机语音相关功能迅猛发展,涌现了各种语音类app,比如华为的小艺、百度的小度、小米的小爱等等还有很多,手机要使用语音就一定会用到麦克风,麦克风就是用来采集我们的声音再转换成指令去命令手机实现相关功能,所以如何有效的去使用麦克风就会变得非常重要,下面我从安卓开发的角度来阐述一下怎么去处理麦克风冲突问题。

下面来简单说下手机语音功能实现的相关流程:

简单了解了手机语音功能实现的相关流程之后,我们来说说麦克风冲突问题是怎么产生的,因为我们在手机中有多款应用会使用到手机的麦克风,比如手机录音的时候,开启地图导航的时候,手机语音助手使能的时候,很多应用都会使用到麦克风,但是手机麦克风同一时间点只能处理单个事件,不能并发响应多个事件,所以我们在使用手机麦克风功能的时候一定要确保麦克风处于闲置状态,否则麦克风的录音功能将无法使用。
安卓系统音频分很多种状态,默认音频就是DEFAULT,常用麦克风就是MIC,通话上下行分别是VOICE_UPLINK和VOICE_DOWNLINK,电话响应VOICE_CALL,摄像头麦克风CAMCORDER,一般系统处于MIC下就证明麦克风被占用了。

AudioSource.DEFAULT:默认音频来源
AudioSource.MIC:麦克风(常用)
AudioSource.VOICE_UPLINK:电话上行
AudioSource.VOICE_DOWNLINK:电话下行
AudioSource.VOICE_CALL:电话、含上下行
AudioSource.CAMCORDER:摄像头旁的麦克风

我们日常使用中,很多时候会出现麦克风被占用,导致功能无法使用,所以我们在进行应用开发的时候就要针对这些占用的情况进行针对性的处理,保证用户每次在使用语音都功能正常, 一般安卓应用都分前台和后台两种状态,用户能够一眼看到界面就说明应用目前处于前台状态,反之就处于后台,一般应用处于后台状态下并且麦克风被占用,我们是无法正常使用麦克风的,所以在这种情况下我们就要办法把应用变成前台应用,安卓一般的做法就是启动一个activity界面抢占音频焦点,夺回麦克风的使用权,下面我们来简单介绍下实际开发中我们应该怎么处理。
安卓的音频管理类AudioManager为我们提供了丰富的接口,我们可以使用getActiveRecordingConfigurations接口获取系统手机的AudioSource状态,如果其中有返回AudioSource.MIC音频类型,证明麦克风被占用了,此时我们就可以在应用内用startActivity来启动一个界面把应用置于前台,抢占焦点获得麦克风使用权。

AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
List<AudioRecordingConfiguration> sources = audioManager.getActiveRecordingConfigurations();
for (AudioRecordingConfiguration configuration : sources) {if (configuration.getAudioSource() == MediaRecorder.AudioSource.MIC) {//麦克风占用,需要针对性处理冲突}
}

有时我们需要实时监听音频状态,我们可以通过AudioManager的监听器 AudioRecordingCallback来实时获取音频状态,监听器的实现方法 onRecordingConfigChanged我们会获取一个AudioRecordingConfiguration集合,通过遍历每个AudioRecordingConfiguration来获取AudioSource判断当前麦克风状态,如果占用了麦克风就要针对异常进行相应处理。

AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audioManager.registerAudioRecordingCallback(new AudioManager.AudioRecordingCallback() {@Overridepublic void onRecordingConfigChanged(List<AudioRecordingConfiguration> configs) {super.onRecordingConfigChanged(configs);for (AudioRecordingConfiguration audioRecordingConfiguration : configs) {if (audioRecordingConfiguration.getAudioSource() == MediaRecorder.AudioSource.MIC) {//此时麦克风处于占用状态,我们可以在这里进行冲突处理}}}
}, null);

下面我们来简单总结下安卓平台下常规应用的麦克风占用处理流程,首先我们得通过AudioManager音频管理类注册监听器AudioRecordingCallback来实时获取系统当前的音频状态,如果返回的AudioSource中包含MIC类型就证明麦克风被占用了,我们就要想办法把自己的应用变成前台应用,抢占焦点。

安卓语音开发之麦克风冲突问题相关推荐

  1. 安卓应用开发顶级框架大盘点,总有一款适合你

    作者 | Slava Vaniukov 译者 | 苏本如,责编 | 夕颜 封图 | CSDN下载自视觉中国 出品 | CSDN(ID:CSDNnews) 随着软件开发向移动应用的转变,越来越多的企业意 ...

  2. 安卓蓝牙开发(1)BLE蓝牙基础知识和一般开发流程

    一.BLE(Bluetooth Low Energy)低功耗蓝牙基本知识 Android 4.3(API级别18)引入了以低功耗蓝牙(BLE)为中心角色的内置平台支持,并提供应用程序可用于发现设备,查 ...

  3. 安卓录屏录麦克风ANE screenANE

    点击下载 安卓录屏录麦克风ANE可以在AIR as3.0开发的安卓APP中捕获手机屏幕及麦克风,并录制成MP4文件.该演示程序演示了如何调用该ANE,运行后,可以录制一个10分钟的mp4文件,麦克风或 ...

  4. 【Vuforia AR Unity 2018.3.12f1】MikuAR安卓程序开发实践(三)代码终结篇_2019.4.24

    Unity平台 + Vuforia SDK实现的AR程序开发 模型的三大操作(平移 旋转 缩放)代码 一.平移 二.旋转缩放 三.操作代码解析 模型的选定(射线法) 食用方法 自发光组件 食用方法 V ...

  5. 「全志科技R329智能语音开发板」简介

    首发极术社区 如对Arm相关技术感兴趣,欢迎私信aijishu20加入技术微信群. 2020年4月,全志科技发布了搭载"ARM中国 周易AIPU"的智能语音专用处理器--R329, ...

  6. 关于AI视觉-如何连接使用智能语音开发套件(USB语音开发套件)

    智能语音开发套件 ,又可称为 USB语音开发套件,可适配于不同的软硬件平台,为用户提供完整的语音开发解决方案,加快产品的落地 目前 Firefly 支持 USB语音开发套件的平台为目前主流的rk339 ...

  7. 用Java开发的【智能语音开发板MEGA ESP32AI】

    有点激动 ~ ~ ~ 新鲜出炉,用视频看看效果哦 我们新研发出世的语音开发板MEGA ESP32AI,来看看吧,有点腻害哦!!!先演示下功能语音控制开关等.播报天气 戳下面链接看视频哦? MEGA E ...

  8. 为什么小小的智能语音开发板引起全球巨头的关注?

    麦肯锡<人工智能,下一个数字前沿>报告中,不意外地,语音领域被麦肯锡重点划线了. 报告估计2016年,AI的年度外部投资总额在80亿美金到120亿美金之间,其中机器学习占了近60%的投资. ...

  9. JAVA硬件开发板_用Java开发的【智能语音开发板MEGA ESP32AI】

    有点激动 ~ ~ ~ 新鲜出炉,用视频看看效果哦 我们新研发出世的语音开发板MEGA ESP32AI,来看看吧,有点腻害哦!!!先演示下功能语音控制开关等.播报天气 戳下面链接看视频哦? 这些都是怎么 ...

最新文章

  1. 我们常称自己“码农”,这次已得到官方认定:“新生代农民工!
  2. Kali学习笔记21:缓冲区溢出实验(漏洞发现)
  3. Activity的使用(四):两个activity的交互
  4. bio和bieos哪个标注模式好_阿里巴巴和亚马逊电商模式差异?哪个电商好做
  5. php smtp发送附件,PHP:如何使用smtp设置发送带附件的电子邮件?
  6. MFC中的几种播放声音的方法
  7. 汲取Linux灵感 Pivotal开源大数据套件
  8. expo运行android studio,一、用Expo开发react-native :快速开始
  9. matlab练习程序(方框模糊)
  10. FunTester框架Redis压测预备
  11. 大二实习使用的技术汇总(中)
  12. 前端性能优化学习(慕课网)笔记
  13. Windows下安装Redis图文教程
  14. 数商云供应链集采管理系统解决方案:产品特色、功能、架构全解析
  15. PAKDD2018小结
  16. 关于Android模块化我有一些话不知当讲不当讲
  17. 手机怎么拼图相片?方法很简单哦
  18. Linux DTS中和中断相关属性的解释和用法
  19. ai cs6和ps cs6 破解
  20. 最热门的CPLD-FPGA论坛

热门文章

  1. Java中角度和弧度的转换,三角函数,反三角函数
  2. leyou商城day7 构建商品索引库及查询
  3. java科学型计算器代码_用JAVA编写的科学计算器源代码
  4. k37.第十五章 K8s运维篇-Prometheus监控 (三)
  5. Android O/P/Q 版本移植iperf网络性能测试工具
  6. 漫画:网站访问缓慢怎么办?
  7. php网页制作过程,网页制作步骤
  8. php-gtk2怎么用,PHP+GTK2 初体验,简单计算器客户端
  9. Visio画图(直角坐标系和relu函数)
  10. 离散数学10__第5章 关系与函数_关系的性质_自反对称传递