在开发录音相关的app的时候,遇到了一个问题,那就是如果有一个录音app已经运行了,那么再运行你的录音软件,那么就会出问题,原因很简单,android的底层只允许开启一个线程去读取麦克风的数据,二者冲突就会导致程序无法正常运行,那么该如何解决这个问题呢,其实思路很简单,就是在运行你的录音app之前,判断一下是否有别的录音软件正在运行,基于这个思路,进行了以下尝试:

1.我查看了AudioRecord中有哪些方法可用,有一个方法叫做getRecordingState()的方法,该方法是获取当前AudioRecord的状态,返回值有RECORDINGSTATE_STOPPED,RECORDINGSTATE_RECORDING,那就在运行之前,先用该方法尝试判断一下AudioRecord的状态,但是实际上,该方法没啥用,原因很简单,AudioRecord获取的状态只是当前实例的状态,(你的AudioRecord和别的录音软件的AudioRecord不是一个!!!)因为AudioRecord不是单例模式,嗯,所以还得尝试其他方法。

2.再看看AudioManager.java能提供什么方法吧,有个叫registerAudioFocus()的方法,好像是用来获取焦点的,但是尝试后,发现还是不行。此外还有一个registerAudioRecordingCallback(AudioManager.AudioRecordingCallback callback),这个方法是如果你的录音软件正在运行,但是有其他的录音软件要使用麦克风,就会回调的一个方法。

3.通过查看AudioManager的方法,发现了一个可能有用的,叫做getActiveRecordingConfigurations()的方法,这个方法可以获取,当前有几个AudioRecordingConfiguration,一般,一个录音app运行了,那么至少有一个AudioRecordingConfiguration,基于这个思路就可以判断当前是否有其他录音软件正在运行,代码如下,经过验证,也是有效的。

private AudioManager mAudioManager;

mAudioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);

if(mAudioManager.getActiveRecordingConfigurations().size() > 0){

Log.i(TAG, "其他的录音app正在使用麦克风!!!");

}

关于andorid中录音app之间的冲突问题相关推荐

  1. 微信支付id出现的重复支付解决方法和app应用中多种支付方式之间的对比

    微信支付id出现的重复支付解决方法和app应用中多种支付方式之间的对比 参考文章: (1)微信支付id出现的重复支付解决方法和app应用中多种支付方式之间的对比 (2)https://www.cnbl ...

  2. 目标检测中的分类和定位冲突问题

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:steven Li | 来源:知乎 https://zhuanlan.zhihu.com/p/1 ...

  3. iOS APP与APP之间的通信方式

    为什么80%的码农都做不了架构师?>>>    1.URL Scheme 这个最常见了,基本接入分享.支付.地图的,都会用到 2.UIPasteboard 其实就是粘贴板,常见的就是 ...

  4. python的软件叫什么-django中的app是指什么

    Django中的app(application)就是应用的意思,当我们的项目足够大的时候,我们将功能单独分成多个app进行开发. Django中的app app(application)就是应用的意思 ...

  5. 创业冲突的五种解决方法是_避免创业合伙人之间发生冲突的四种方法

    由于创业合伙人之间认识上的差异.信息沟通上的障碍.态度的相悖以及利益的互斥,产生矛盾冲突在所难免.当矛盾冲突发生后,创业合伙人到底该如何做呢?这里有四种处理方法值得借鉴. 方法一:自我批评.创业合伙人 ...

  6. Matlab App Designer 【04】使用公共函数在两个App之间传递数据

    使用公共函数在两个App之间传递数据 一.两个App之间传递数据的关键所在 1.在主App中建立公共函数 2.副App需要输入参数 3.一个非常简单的官网案例 二.一个非常简单的例子 1.LPL战队 ...

  7. iOS实现App之间的分享

    我们在iOS平台上想要实现不同App之间的内容分享一般有几种常用方式: 第一种是通过AirDrop实现不同设备的App之间文档和数据的分享: 第二种是给每个App定义一个URL Scheme,通过访问 ...

  8. ESP8266教程5 — MCU和机智云APP之间互相通信

    目录 1.前期准备 1.1.材料准备 1.2.理论准备 2.创建项目数据点 3.下载MCU开发固件包 4.esp8266模块输入官方的SDK固件 5.实际操作 这段时间里有空就自己玩玩ESP8266, ...

  9. 安卓设置keychain_iOS 开发keychain 使用与多个APP之间共享keychain数据的使用

    keychain的作用: keychain,相当于MAC OS中的钥匙串,但在iOS中相对于功能非常简单.在iOS开发中如果写数据到手机沙盒中,但不管是Caches 还是NSUserDefaults ...

最新文章

  1. 60个开发者不容错过的免费资源库
  2. knn计算机在图片中的应用,图像分类和kNN
  3. NSIS:超级轻量皮肤SkinH
  4. 解决 /lib64/libc.so.6: version `GLIBC_2.15‘ not found 问题
  5. WSGI Middleware
  6. PKI/CA与数字证书
  7. java 二维数组内存溢出_程序员:学习心得,Java内存区域,内存溢出异常
  8. android零基础教程,Android零基础入门|Activity初入门,创建和配置如此简单
  9. Fences中关于Explorer非正常关闭问题
  10. MobiCom2015阅读表(Poster)
  11. matlab矩阵变成行向量,matlab中将一个矩阵按照行拼成一个行向量应该怎么输?
  12. Android 外挂--- 微信自动聊天
  13. 方舟手游修改服务器难度,方舟生存进化单机版怎么调难度等级
  14. 数字的翻译(英文到中文)
  15. java开发中的abstract的用法
  16. 2021-04-01裁判文书网数据python爬虫更新下载
  17. 我打算学python,可是我的拖延症已经晚期了
  18. [LeetCode] 589. N-ary Tree Preorder Traversal
  19. 大龄码农适合做什么,比如40岁以上?
  20. 【php】php语法基础

热门文章

  1. 【流云】Qlogic Infiniband RDS高速互联驱动程序安装及配置
  2. IE浏览器a标签无法下载问题解决(IE浏览器a标签download属性不兼容问题解决)
  3. vue3/4填坑(解决报错:Compiled with 1 warnings:warning Delete `⏎····` prettier/pret (0 errors, 2 warnings)
  4. 数据库面试题汇总(60题)
  5. [草泥马语] ws2gmh之正则版
  6. 50HZ陷波器python源码
  7. an error has occurred while trying to access the log file. logging may not function properly
  8. git 的合并原理(递归三路合并算法)
  9. 【Python教程】进阶篇
  10. Android TabLayout自定义指示器之三角形效果实现