forked from organicmaps/organicmaps
[android] Do not stop music when announcing directions
Also added a proper audio attributes and fixed focus release. Signed-off-by: Alexander Borsuk <me@alex.bio>
This commit is contained in:
parent
c6499fd147
commit
07fe2ec5ac
1 changed files with 27 additions and 14 deletions
|
@ -1,38 +1,51 @@
|
|||
package com.mapswithme.maps.sound;
|
||||
|
||||
import android.content.Context;
|
||||
import android.media.AudioAttributes;
|
||||
import android.media.AudioFocusRequest;
|
||||
import android.media.AudioManager;
|
||||
import android.os.Build;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import static android.media.AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE;
|
||||
import static android.media.AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK;
|
||||
|
||||
public class AudioFocusManager
|
||||
{
|
||||
@Nullable
|
||||
private AudioManager audioManager = null;
|
||||
private AudioManager mAudioManager = null;
|
||||
@Nullable
|
||||
private AudioManager.OnAudioFocusChangeListener mOnFocusChange = null;
|
||||
@Nullable
|
||||
private AudioFocusRequest mAudioFocusRequest = null;
|
||||
|
||||
public AudioFocusManager(@Nullable Context context)
|
||||
{
|
||||
if (context != null)
|
||||
audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
|
||||
mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
|
||||
|
||||
if (Build.VERSION.SDK_INT < 26)
|
||||
mOnFocusChange = focusGain -> {};
|
||||
else
|
||||
mAudioFocusRequest = new AudioFocusRequest.Builder(AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK).setAudioAttributes(
|
||||
new AudioAttributes.Builder()
|
||||
.setUsage(AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE)
|
||||
.setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
|
||||
.build()
|
||||
).build();
|
||||
}
|
||||
|
||||
public boolean requestAudioFocus()
|
||||
{
|
||||
boolean isMusicActive = false;
|
||||
|
||||
if (audioManager != null)
|
||||
isMusicActive = audioManager.isMusicActive();
|
||||
|
||||
if (audioManager != null)
|
||||
if (mAudioManager != null)
|
||||
{
|
||||
if (Build.VERSION.SDK_INT >= 26)
|
||||
audioManager.requestAudioFocus(new AudioFocusRequest.Builder(AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE).build());
|
||||
isMusicActive = mAudioManager.isMusicActive();
|
||||
if (Build.VERSION.SDK_INT < 26)
|
||||
mAudioManager.requestAudioFocus(mOnFocusChange, AudioManager.STREAM_VOICE_CALL, AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK);
|
||||
else
|
||||
audioManager.requestAudioFocus(focusChange -> {}, AudioManager.STREAM_VOICE_CALL, AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE);
|
||||
mAudioManager.requestAudioFocus(mAudioFocusRequest);
|
||||
}
|
||||
|
||||
return isMusicActive;
|
||||
|
@ -40,12 +53,12 @@ public class AudioFocusManager
|
|||
|
||||
public void releaseAudioFocus()
|
||||
{
|
||||
if (audioManager != null)
|
||||
if (mAudioManager != null)
|
||||
{
|
||||
if (Build.VERSION.SDK_INT >= 26 )
|
||||
audioManager.abandonAudioFocusRequest(new AudioFocusRequest.Builder(AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE).build());
|
||||
if (Build.VERSION.SDK_INT < 26)
|
||||
mAudioManager.abandonAudioFocus(mOnFocusChange);
|
||||
else
|
||||
audioManager.abandonAudioFocus(focusChange -> {});
|
||||
mAudioManager.abandonAudioFocusRequest(mAudioFocusRequest);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue