[Video] Resume background audio whenever muting video audio (#4915)
parent
c2131bb039
commit
65d6e561d4
|
@ -13,20 +13,29 @@ public class ExpoPlatformInfoModule: Module {
|
|||
try? AVAudioSession.sharedInstance().setCategory(audioCategory)
|
||||
}
|
||||
|
||||
Function("setAudioMixWithOthers") { (mixWithOthers: Bool) in
|
||||
var options: AVAudioSession.CategoryOptions
|
||||
Function("setAudioActive") { (active: Bool) in
|
||||
var categoryOptions: AVAudioSession.CategoryOptions
|
||||
let currentCategory = AVAudioSession.sharedInstance().category
|
||||
if mixWithOthers {
|
||||
options = [.mixWithOthers]
|
||||
|
||||
if active {
|
||||
categoryOptions = [.mixWithOthers]
|
||||
try? AVAudioSession.sharedInstance().setActive(true)
|
||||
} else {
|
||||
options = [.duckOthers]
|
||||
categoryOptions = [.duckOthers]
|
||||
try? AVAudioSession
|
||||
.sharedInstance()
|
||||
.setActive(
|
||||
false,
|
||||
options: [.notifyOthersOnDeactivation]
|
||||
)
|
||||
}
|
||||
|
||||
try? AVAudioSession
|
||||
.sharedInstance()
|
||||
.setCategory(
|
||||
currentCategory,
|
||||
mode: .default,
|
||||
options: options
|
||||
options: categoryOptions
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,9 +9,9 @@ export function getIsReducedMotionEnabled(): boolean {
|
|||
return NativeModule.getIsReducedMotionEnabled()
|
||||
}
|
||||
|
||||
export function setAudioMixWithOthers(mixWithOthers: boolean): void {
|
||||
export function setAudioActive(active: boolean): void {
|
||||
if (Platform.OS !== 'ios') return
|
||||
NativeModule.setAudioMixWithOthers(mixWithOthers)
|
||||
NativeModule.setAudioActive(active)
|
||||
}
|
||||
|
||||
export function setAudioCategory(audioCategory: AudioCategory): void {
|
||||
|
|
|
@ -6,11 +6,13 @@ export function getIsReducedMotionEnabled(): boolean {
|
|||
}
|
||||
|
||||
/**
|
||||
* Set whether the app's audio should mix with other apps' audio.
|
||||
* Set whether the app's audio should mix with other apps' audio. Will also resume background music playback when `false`
|
||||
* if it was previously playing.
|
||||
* @param mixWithOthers
|
||||
* @see https://developer.apple.com/documentation/avfaudio/avaudiosession/setactiveoptions/1616603-notifyothersondeactivation
|
||||
*/
|
||||
export function setAudioMixWithOthers(mixWithOthers: boolean): void {
|
||||
throw new NotImplementedError({mixWithOthers})
|
||||
export function setAudioActive(active: boolean): void {
|
||||
throw new NotImplementedError({active})
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -8,8 +8,8 @@ export function getIsReducedMotionEnabled(): boolean {
|
|||
return window.matchMedia('(prefers-reduced-motion: reduce)').matches
|
||||
}
|
||||
|
||||
export function setAudioMixWithOthers(mixWithOthers: boolean): void {
|
||||
throw new NotImplementedError({mixWithOthers})
|
||||
export function setAudioActive(active: boolean): void {
|
||||
throw new NotImplementedError({active})
|
||||
}
|
||||
|
||||
export function setAudioCategory(audioCategory: AudioCategory): void {
|
||||
|
|
|
@ -159,7 +159,7 @@ function App() {
|
|||
|
||||
React.useEffect(() => {
|
||||
PlatformInfo.setAudioCategory(AudioCategory.Ambient)
|
||||
PlatformInfo.setAudioMixWithOthers(true)
|
||||
PlatformInfo.setAudioActive(true)
|
||||
initPersistedState().then(() => setReady(true))
|
||||
}, [])
|
||||
|
||||
|
|
|
@ -60,12 +60,12 @@ export function VideoEmbedInnerNative() {
|
|||
nativeControls={true}
|
||||
onEnterFullscreen={() => {
|
||||
PlatformInfo.setAudioCategory(AudioCategory.Playback)
|
||||
PlatformInfo.setAudioMixWithOthers(false)
|
||||
PlatformInfo.setAudioActive(false)
|
||||
player.muted = false
|
||||
}}
|
||||
onExitFullscreen={() => {
|
||||
PlatformInfo.setAudioCategory(AudioCategory.Ambient)
|
||||
PlatformInfo.setAudioMixWithOthers(true)
|
||||
PlatformInfo.setAudioActive(true)
|
||||
player.muted = true
|
||||
if (!player.playing) player.play()
|
||||
}}
|
||||
|
@ -139,7 +139,7 @@ function Controls({
|
|||
const category = muted ? AudioCategory.Ambient : AudioCategory.Playback
|
||||
|
||||
PlatformInfo.setAudioCategory(category)
|
||||
PlatformInfo.setAudioMixWithOthers(mix)
|
||||
PlatformInfo.setAudioActive(mix)
|
||||
player.muted = muted
|
||||
}, [player])
|
||||
|
||||
|
|
Loading…
Reference in New Issue