在 Android 11 中,仅在应用处于前台时才可访问麦克风。为了遵守这个限制,开发人员需要使用新的 AudioManager.OnAudioFocusChangeListener API 监听音频焦点的改变,并在应用失去焦点时停止录制音频。
以下是一个示例代码,在前台时打开麦克风,当应用失去焦点后停止录制音频:
1.添加权限到AndroidManifest.xml:
2.使用 Audio Focus API 获取焦点:
private AudioManager audioManager private final OnAudioFocusChangeListener afChangeListener = new OnAudioFocusChangeListener() { public void onAudioFocusChange(int focusChange) { switch (focusChange) { case AudioManager.AUDIOFOCUS_GAIN: if (mRecording) { resumeRecording(); } else { startRecording(); } break; case AudioManager.AUDIOFOCUS_LOSS: stopRecording(); break; case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT: pauseRecording(); break; case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK: // Lower the volume of your output break; } } };
3.要在活动的 onCreate 方法中初始化 AudioFocus:
audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
4.请求音频焦点:
int result = audioManager.requestAudioFocus(afChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
5.当应用程序失去前景时,您要停止录制音频:
audioManager.abandonAudioFocus(afChangeListener);
如下所示:
@Override public void onPause() { super.onPause(); audioManager.abandonAudioFocus(afChangeListener); }
为遵守 Android 11 中的麦克风使用限制,开发人员必须注意应用的焦点,并在应用失去焦点时停止录制或处理音频。