|
@@ -16,8 +16,11 @@
|
16
|
16
|
|
17
|
17
|
package org.jitsi.meet.sdk;
|
18
|
18
|
|
|
19
|
+import android.media.AudioAttributes;
|
19
|
20
|
import android.media.AudioDeviceInfo;
|
|
21
|
+import android.media.AudioFocusRequest;
|
20
|
22
|
import android.media.AudioManager;
|
|
23
|
+import android.os.Build;
|
21
|
24
|
|
22
|
25
|
import java.util.HashSet;
|
23
|
26
|
import java.util.Set;
|
|
@@ -216,8 +219,24 @@ class AudioDeviceHandlerGeneric implements
|
216
|
219
|
audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
|
217
|
220
|
audioManager.setMicrophoneMute(false);
|
218
|
221
|
|
219
|
|
- if (audioManager.requestAudioFocus(this, AudioManager.STREAM_VOICE_CALL, AudioManager.AUDIOFOCUS_GAIN)
|
220
|
|
- == AudioManager.AUDIOFOCUS_REQUEST_FAILED) {
|
|
222
|
+ int gotFocus;
|
|
223
|
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
|
224
|
+ gotFocus = audioManager.requestAudioFocus(new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN)
|
|
225
|
+ .setAudioAttributes(
|
|
226
|
+ new AudioAttributes.Builder()
|
|
227
|
+ .setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION)
|
|
228
|
+ .setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
|
|
229
|
+ .build()
|
|
230
|
+ )
|
|
231
|
+ .setAcceptsDelayedFocusGain(true)
|
|
232
|
+ .setOnAudioFocusChangeListener(this)
|
|
233
|
+ .build()
|
|
234
|
+ );
|
|
235
|
+ } else {
|
|
236
|
+ gotFocus = audioManager.requestAudioFocus(this, AudioManager.STREAM_VOICE_CALL, AudioManager.AUDIOFOCUS_GAIN);
|
|
237
|
+ }
|
|
238
|
+
|
|
239
|
+ if (gotFocus == AudioManager.AUDIOFOCUS_REQUEST_FAILED) {
|
221
|
240
|
JitsiMeetLogger.w(TAG + " Audio focus request failed");
|
222
|
241
|
return false;
|
223
|
242
|
}
|