我实现了一个Android后台服务(基于Pocket Sphinx),当手机屏幕打开时,它会持续监听、检测和识别某些关键字,然后做出相应React(对于domotic项目)。然而,我的应用应始终具有较低的优先级,并且我希望它在任何其他应用需要使用麦克风时释放麦克风资源。当应用想要使用麦克风时,我是否可以接收任何系统意图或系统广播(以便我的服务可以释放它)?或者,是否有更好的方法或实践?
这是当另一个应用程序要访问麦克风时,我希望避免的错误日志:
AudioFocus requestAudioFocus() from android.media.AudioManager@419c3908com.google.android.voicesearch.a.h@419c67b8
I/MicrophoneInputStream(32360): mic_starting com.google.android.speech.audio.w@41989a30
D/AudioHardwareALSA(277): openInputStream: devices 0x400000 format 0x1 channels 16 sampleRate 16000
E/AudioHardwareALSA(277): error:Input stream already opened for recording
E/AudioRecord(32360): Could not get audio input for record source 6
E/AudioRecord-JNI(32360): Error creating AudioRecord instance: initialization check failed.
E/AudioRecord-Java(32360): [ android.media.AudioRecord ] Error code -20 when initializing native AudioRecord object.
E/MicrophoneInputStream(32360): Failed to initialize AudioRecord
1条答案
按热度按时间yyhrrdl81#
看看我的回答:https://stackoverflow.com/a/75626887/8228163.如果你是一个特权系统应用程序(需要
CAPTURE_AUDIO_HOTWORD
权限),你可以使用HOTWORD
音频源,它正是这样做的-把麦克风给任何其他使用MIC
源请求它的东西,我想。如果没有,低于Android 10我不认为这是可能的体面的方式(或至少我没有找到任何实际的解决方案).截至10,不知道,因为我没有研究它的文档尚未xD,但我认为它是不同的(?):https://developer.android.com/guide/topics/media/sharing-audio-input .