Fix voice recording being interrupted by notifications sounds (#6438)
This commit is contained in:
committed by
GitHub
parent
0db95d9519
commit
5f0d026225
@@ -39,10 +39,17 @@ class DefaultAudioFocus(
|
||||
AudioManager.AUDIOFOCUS_GAIN -> {
|
||||
// Do nothing
|
||||
}
|
||||
AudioManager.AUDIOFOCUS_LOSS,
|
||||
AudioManager.AUDIOFOCUS_LOSS -> {
|
||||
// Permanent focus loss (e.g., phone call) — always stop/pause.
|
||||
onFocusLost()
|
||||
}
|
||||
AudioManager.AUDIOFOCUS_LOSS_TRANSIENT,
|
||||
AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK -> {
|
||||
onFocusLost()
|
||||
// For recording, ignore transient focus losses (e.g., notification sounds).
|
||||
// The AudioRecord API keeps capturing regardless.
|
||||
if (requester != AudioFocusRequester.RecordVoiceMessage) {
|
||||
onFocusLost()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -51,7 +58,12 @@ class DefaultAudioFocus(
|
||||
val audioAttributes = AudioAttributes.Builder()
|
||||
.setUsage(requester.toAudioUsage())
|
||||
.build()
|
||||
val request = AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN)
|
||||
val focusGain = if (requester == AudioFocusRequester.RecordVoiceMessage) {
|
||||
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE
|
||||
} else {
|
||||
AudioManager.AUDIOFOCUS_GAIN
|
||||
}
|
||||
val request = AudioFocusRequest.Builder(focusGain)
|
||||
.setAudioAttributes(audioAttributes)
|
||||
.setOnAudioFocusChangeListener(listener)
|
||||
.setWillPauseWhenDucked(requester.willPausedWhenDucked())
|
||||
|
||||
Reference in New Issue
Block a user