Чтение онлайн

на главную

Жанры

iOS. Приемы программирования

Нахавандипур Вандад

Шрифт:

Когда приложение откроется, мы выделим и инициализируем аудиоплеер, считаем содержимое файла 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;

}

В данном примере кода мы используем аудиосессии из фреймворка AV, чтобы сначала перевести в беззвучный режим другие приложения, воспроизводящие музыку (например, приложение iPod), и лишь потом переходим к воспроизведению аудио. Если тот аудиофайл, который воспроизводится в настоящее время (в фоновом режиме), завершается, можно запустить новый экземпляр AVAudioPlayer

и приступить к проигрыванию нового аудиофайла. iOS откорректирует обработку информации с учетом такой ситуации. Но нет гарантии, что ваше приложение, работающее в фоновом режиме, получит от системы разрешение на выделение достаточного количества памяти, чтобы загрузить в нее данные нового аудиофайла.

Вы, наверное, заметили, что в приведенном примере кода мы делаем делегат нашего приложения делегатом аудиоплеера. Мы реализуем методы делегата аудиоплеера вот так:

— (void)audioPlayerBeginInterruption:(AVAudioPlayer *)player{

/* Аудиосессия прервана.

Здесь мы ставим плеер на паузу */

}

— (void)audioPlayerEndInterruption:(AVAudioPlayer *)player

withOptions:(NSUInteger)flags{

/* Проверяем по флагам, можем ли мы возобновить воспроизведение аудио.

Если да, то делаем это здесь */

if (flags == AVAudioSessionInterruptionOptionShouldResume){

[player play];

}

}

— (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player

successfully:(BOOL)flag{

NSLog(@"Finished playing the song");

/* Параметр flag сообщает, удалось ли успешно закончить воспроизведение */

if ([player isEqual: self.audioPlayer]){

self.audioPlayer = nil;

} else {

/* Это не наш аудиоплеер! */

}

}

Кроме того, необходимо учитывать, что, когда приложение воспроизводит аудиофайл в фоновом режиме, не будет изменяться значение, возвращаемое свойством backgroundTimeRemaining класса UIApplication. Иными словами этот аспект можно описать так: приложение, запрашивающее возможность воспроизведения аудио в фоновом режиме, не запрашивает у операционной системы iOS, явно или неявно, дополнительное время на исполнение кода.

14.5. Обработка геолокационных изменений в фоновом режиме

Постановка задачи

Вы пишете приложение, основной функционал которого заключается в обработке геолокационных изменений с помощью фреймворка Core Location. Необходимо, чтобы создаваемое приложение получало данные об изменении местоположения устройства с iOS, даже если приложение переходит в фоновый режим.

Решение

Выберите приложение в навигаторе (Navigator) в Xcode. Затем в разделе Capabilities (Возможности) перейдите в подраздел Background Modes (Фоновые режимы). После того как система выведет список фоновых режимов, нажмите переключатель Location (Местоположение).

Поделиться:
Популярные книги

Лекарь Империи 4

Карелин Сергей Витальевич
4. Лекарь Империи
Фантастика:
городское фэнтези
аниме
попаданцы
5.00
рейтинг книги
Лекарь Империи 4

Натюрморт с воронами

Престон Дуглас
4. Пендергаст
Фантастика:
ужасы и мистика
9.37
рейтинг книги
Натюрморт с воронами

Азенкур

Корнуэлл Бернард
Проза:
историческая проза
6.83
рейтинг книги
Азенкур

Русская рулетка. Как выжить в борьбе за собственное здоровье

Мясников Александр Леонидович
Дом и Семья:
здоровье и красота
5.50
рейтинг книги
Русская рулетка. Как выжить в борьбе за собственное здоровье

Пилот штрафной эскадрильи

Корчевский Юрий Григорьевич
Фантастика:
альтернативная история
5.79
рейтинг книги
Пилот штрафной эскадрильи

Уникумы Вселенной

Иванович Юрий
1. Уникумы Вселенной
Фантастика:
боевая фантастика
космическая фантастика
7.29
рейтинг книги
Уникумы Вселенной

Юность в Железнодольске

Воронов Николай Павлович
Проза:
советская классическая проза
5.00
рейтинг книги
Юность в Железнодольске

Голоса ночи (сборник)

Малышева Анна Витальевна
Детективы:
прочие детективы
6.25
рейтинг книги
Голоса ночи (сборник)

Загадка Катилины

Сейлор Стивен
3. Roma sub Rosa
Проза:
историческая проза
5.00
рейтинг книги
Загадка Катилины

Один против всех

Сухов Евгений Евгеньевич
Детективы:
боевики
7.67
рейтинг книги
Один против всех

Дважды одарённый. Том X

Тарс Элиан
10. Дважды одаренный
Фантастика:
аниме
фэнтези
попаданцы
5.40
рейтинг книги
Дважды одарённый. Том X

На границе империй. Том 9. Часть 5

INDIGO
18. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 5

Серв-батальон

Ливадный Андрей Львович
10. Экспансия: История Галактики
Фантастика:
космическая фантастика
8.29
рейтинг книги
Серв-батальон

Хроники Тамула. Трилогия

Эддингс Дэвид
Тамули
Фантастика:
фэнтези
6.25
рейтинг книги
Хроники Тамула. Трилогия