问题
So my app is running in the background because of CoreLocation that has requested AlwaysAuthorization. This prevents app to reach suspended state. It stays in background state and is receiving location events. After some location events I would like to activate AVAudioSession and play some sounds. How to activate session properly (in this background app) when I'm using other app in foreground right now and this app is playing audio track for example. Suppose I'm watching some video in Youtube app and my background app needs to play audio right now. I've problems in activating audio session in this case.
I can't use AudioToolbox
playing engine in this case because those sounds needs to be played even when Ring/Silent switch is on.
I know I need to use AVAudioSessionCategoryPlayback
category. I also don't want other apps to be played in the same time so I'm not using MixWithOthers
or DuckOthers
category options.
I have enabled UIBackgroundModes
for audio playback in background.
How to activate such session when app is in background and other app currently is playing audio without any mixing options enabled. How to interrupt audio session in current foreground app so my background app can activate it for playback time. After playing is over my plan is to deactivate audio session in background and notify other apps that they can resume theirs playback.
回答1:
Add these below 3 lines in the didFinishLaunchingWithOptions
method of AppDelegate.m
class and test the app again. Let me know if there is any problem regarding the same.
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
[UIApplication sharedApplication].idleTimerDisabled = YES;
来源:https://stackoverflow.com/questions/41818208/can-avaudiosession-be-activated-in-background-state-without-mixwithothers