1、麦克风被占用
做过Android音视频开发的可能会碰到过这样的问题,在录音时,发现麦克风被占用,解决办法也很简单,给个提示说麦克风被占用即可,如何知道麦克风被占用呢 上答案,原理就是开一个录音试试,如果不能录音,说明被占用了,代码如下:
2、扬声器被占用
什么扬声器还能被占用麦克风被占用应该很多人是知道的,但是很多人不知道扬声器也会被占用,在搜索这个知识点的时候就会发现找不到答案,因为开发这一块的相比录音这一块的要少的多。当我们打电话时,扬声器或者说听筒就会被占用,你此时放音乐肯定是没有声音的。
公司里有个项目用到了一个开源框架,已经实现了语音通话功能,领导希望实现按一下手机的一个按键实现禁止说话,再按一下又可以说话,这只是对于自己是否可以说话,但是听是一直都可以听的,就像使用对讲机一样,有时候,你不看屏幕的话,你不知道当前是否打开了说话的开关,所以希望在按这个开关键的时候发出提示音,开是一个提示音,关又是另一个提示音,这样即使不看屏幕的显示状态也能知道当前的说话开关状态是开还是关,看似很简单的功能,不就是播放两个提示音嘛,我三下两除二就把代码写好了,但是用到项目中时发现提示音并没有发出声响来,刚开始以为代码有问题,后来才知道原来扬声器也会被占用的,当语音通话的时候,声音类型是设置成了通话类型的,只要设置成了通话类型,自动就会给你占用扬声器,避免语音时还能听到别的软件发出来的声音,后来试过把声音类型改成Music,问题解决,但是仔细想想,人家系统既然设置通话类型应该占用扬声器,肯定是有一定的道理的,语音通话了,就不应该让音乐播放器发出声音,后来在同事的提醒下解决了问题,所以说同事之间的交流还是很有必要的。
解决方案:
既然语音时占用了扬声器,是你的应用在语音,那就是你的应用在占用扬声器,则我们可以在使用扬声器的地方去播放提示音即可,公司的项目是使用AudioTrack来播放来自 络的语音流的,它接收的是PCM数据的字节数组,所以我们就把提示音转换为PCM格式保存为文件,放在项目中,然后通过输入流读入内存,因为容量不算大,很短的语音,但也不算小,所以我不想每次播放时都读这个文件,所以我就使用了软引用,把文件读到字节数组后保存在软引用中,内存不足时可以回收,使用时先从软引用拿,拿不到再读文件,读到了又放入软引用中。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!