IOS AVAudioPlayer отключает фоновая музыка другого приложения
У меня есть приложение для упражнений, которое должно воспроизводить звук. Я использую AVAudioPlayer для воспроизведения звука.
Но когда звук начинает воспроизводиться, фоновая музыка из другого приложения (приложение для радиопотока) отключается.
Как я могу заставить его не прерывать фоновую музыку? Потому что я хочу, чтобы пользователь услышал музыку во время упражнений.
Спасибо.
Ответы
Ответ 1
Вы можете использовать следующий код, в котором вы используете AVAudioPlayer:
// Set AudioSession
NSError *sessionError = nil;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:&sessionError];
[[AVAudioSession sharedInstance] setActive:YES error:&sessionError];
Если вы хотите установить делегат, вы можете добавить эту строку кода:
[[AVAudioSession sharedInstance] setDelegate:self];
Ответ 2
В моем случае я хотел, чтобы фоновый звук воспроизводился на более низкой громкости, так как звук, воспроизводимый моим приложением, больше напоминает предупреждение. Я использую это:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// prevents our app from stopping other audio,
// e.g. music, podcats, etc. that may be playing when launched
// our audio will be played at a higher volume
// and the background audio will "duck" until done
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryMultiRoute
withOptions:AVAudioSessionCategoryOptionDuckOthers
error:nil];
}
Ответ 3
На основе SujithPt Ответ здесь одно и то же:
AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient, error: nil)
Ответ 4
Для Swift 2.2 добавьте это где угодно, прежде чем играть или готовить:
_ = try? AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)
Ответ 5
Для Swift 4.2
import AVFoundation
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
do {
try AVAudioSession.sharedInstance().setCategory(.ambient, mode: .default, options: AVAudioSession.CategoryOptions.mixWithOthers)
} catch let error {
print(error.localizedDescription)
}
return true
}