java - Android AudioRecord 没有从另一个使用它的应用程序中取回麦克风并发生错误
问题描述
我使用 AudioRecord 在 Android 中制作了一个有效的录音前台服务。
问题是麦克风共享:由于我的应用程序在录制处于活动状态时不需要任何可见的 UI,因此当另一个应用程序请求麦克风时(例如语音通话或录制视频),麦克风的使用将移交给该应用程序,即美好的。
但是,当该应用程序使用麦克风完成后,我的应用程序无法取回麦克风,并且我不断收到错误消息。
这些是我得到的错误:
E/IAudioFlinger: createRecord returned error -1
E/AudioRecord: createRecord_l(169): AudioFlinger could not create record track, status: -1
换句话说,一旦另一个应用程序开始使用麦克风,我就会收到上述错误,但是当另一个应用程序完成使用它时,我仍然会收到相同的错误,因此我无法再录制了。
这是记录音频的代码的一部分。
recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,
RECORDER_SAMPLERATE, RECORDER_CHANNELS,
RECORDER_AUDIO_ENCODING, BufferElements2Rec * BytesPerElement);
recorder.startRecording();
//Then in a thread I perform the following read. THIS IS THE LINE THAT CAUSES THE ERROR
recorder.read(sData, 0, BufferElements2Rec);
我一直在使用 Android 11 API 30 进行测试。
我阅读了有关共享麦克风输入的https://developer.android.com/guide/topics/media/sharing-audio-input,但它指出当另一个应用程序使用麦克风时,我的应用程序应该保持静音,而不是错误。
我能做些什么来解决这个问题?
提前致谢
解决方案
推荐阅读
- java - 无法在我的任务应用程序中将任务添加到列表视图
- sql - Oracle Apex 的对象浏览器中未显示任何数据
- c# - 如何将 BDF 位图字体解析为数组
- octave - 是否可以从旧式类派生 classdef 类?
- next.js - 关于静态/混合和 SSR 构建的一些 NextJS 问题
- antlr - 修改 ctx.removeLastChild/ctx.addChild 后,有没有办法从 antlr4ts 解析树中取回源代码?
- javascript - 在选择列表中的选定项目旁边添加输入文本
- c# - 限制 .net core 中的并发请求
- apache-spark-sql - 如何从以下架构中选择列“?
- c++ - 为什么向量化在这个 for 循环中没有好处?