Учтите, что фоновое воспроизведение аудио может не сработать в симуляторе iOS. Этот раздел нужно тестировать на реальном устройстве. Вполне возможно, что на симуляторе воспроизведение аудио прекратится, как только приложение перейдет в фоновый режим.
В iOS приложение может запросить продолжить воспроизведение своих аудиофайлов, даже если оно само переходит в фоновый режим. В этом разделе мы воспользуемся плеером AVAudioPlayer, который прост и удобен в обращении. Наша задача — запустить аудиоплеер и воспроизвести простой трек, а пока играет музыка — нажать кнопку Home (Домой) и перевести приложение в фоновый режим. Если мы внесем в файл. plist нашего приложения ключ UIBackgroundModes, iOS продолжит воспроизводить музыку из аудиоплеера приложения, действующего в фоновом режиме. Пока плеер работает в фоновом режиме, мы должны просто воспроизводить музыку и предоставлять плееру те данные, которые необходимы ему для работы. Нам не придется выполнять никаких иных задач, например отображать новые экраны.
Вот объявление простого делегата приложения, запускающего AVAudioPlayer:
#import «AppDelegate.h»
#import
@interface AppDelegate ()
@property (nonatomic, strong) AVAudioPlayer *audioPlayer;
@end
@implementation AppDelegate
<# Остаток вашего кода находится здесь #>
Когда приложение откроется, мы выделим и инициализируем аудиоплеер, считаем содержимое файла MySong.mp4 в экземпляр NSData и используем эти данные в процессе инициализации аудиоплеера:
— (BOOL) application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
dispatch_queue_t dispatchQueue =
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(dispatchQueue, ^(void) {
NSError *audioSessionError = nil;
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
if ([audioSession setCategory: AVAudioSessionCategoryPlayback
error:&audioSessionError]){
NSLog(@"Successfully set the audio session.");
} else {
NSLog(@"Could not set the audio session");
}
NSBundle *mainBundle = [NSBundle mainBundle];
NSString *filePath = [mainBundle pathForResource:@"MySong"
ofType:@"mp3"];
NSData *fileData = [NSData dataWithContentsOfFile: filePath];
NSError *error = nil;
/* Запускаем аудиоплеер. */
self.audioPlayer = [[AVAudioPlayer alloc] initWithData: fileData
error:&error];
/* Получили ли мы экземпляр AVAudioPlayer? */
if (self.audioPlayer!= nil){
/* Задаем делегат и начинаем воспроизведение. */
self.audioPlayer.delegate = self;
if ([self.audioPlayer prepareToPlay] &&
[self.audioPlayer play]){
NSLog(@"Successfully started playing…");
} else {
NSLog(@"Failed to play.");
}
} else {
/* Не удалось инстанцировать AVAudioPlayer. */
}
});
self.window = [[UIWindow alloc] initWithFrame:
[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}