我的应用程序中有录音服务,可以连续录制声音。因此,它将始终占用AudioRecord。这意味着没有其他应用程序可以使用录音机,因为它已经被服务占用。有没有办法通知其他应用程序正在请求录音机(以便我可以发布它)以及应用程序何时释放它(以便我可以将其分配回服务)?
答案 0 :(得分:1)
也许一种可能的方法是创建一个BroadcastReceiver
,它从应用程序接收请求控制麦克风源的事件。 onReceive()
方法应与服务交互并释放资源。当其他应用程序完成时,它可以恢复该过程以再次启动该服务。如果您无法控制请求应用的行为,我认为问题略有不同。无论如何:
问题在于知道何时请求资源,这可以通过AudioManager意图类型来完成。 请务必查看Managing audio focus以TRANSIENT方式讨论音频焦点损失!
答案 1 :(得分:1)
正如@Rekire所说,可能无法实现这一目标。此外,AudioManager不提供此类广播,因此不适用于不同的应用程序。也许生根设备是唯一的选择。
答案 2 :(得分:0)
这可以通过AudioManager.OnAudioFocusChangeListener回调来完成。只需在AUDIOFOCUS_LOSS_TRANSIENT事件上停止录制,然后在AUDIOFOCUS_GAIN事件上重新开始。 此解决方案适用于Google语音搜索(Google搜索小部件,Google Chrome等)。
但不幸的是,它对其他普通应用程序来说效果不佳(例如HTC M7录音机应用程序无法在第一次点击时开始录制"录制"按钮,第二次点击做诀窍 - 看来app应该应该准备好几次失败时重试录音。)