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

на главную - закладки

Жанры

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 (Местоположение).

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

Родословная. Том 2

Ткачев Андрей Юрьевич
2. Линия крови
Фантастика:
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Родословная. Том 2

Ненаглядная жена его светлости

Зика Натаэль
Любовные романы:
любовно-фантастические романы
6.23
рейтинг книги
Ненаглядная жена его светлости

Гамбургский счет: Статьи – воспоминания – эссе (1914–1933)

Шкловский Виктор Борисович
Научно-образовательная:
история
5.00
рейтинг книги
Гамбургский счет: Статьи – воспоминания – эссе (1914–1933)

Кодекс Императора

Сапфир Олег
1. Кодекс Императора
Фантастика:
аниме
фэнтези
попаданцы
4.25
рейтинг книги
Кодекс Императора

Я до сих пор не царь. Книга XXVII

Дрейк Сириус
27. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я до сих пор не царь. Книга XXVII

Наномашины, первоклашка! Том 4

Новиков Николай Васильевич
4. Чего смотришь? Иди книгу читай
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наномашины, первоклашка! Том 4

Неучтенный элемент. Том 2

NikL
2. Антимаг. Вне системы
Фантастика:
городское фэнтези
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 2

Артефактор. Шаг в неизвестность

Седых Александр Иванович
1. Артефактор
Фантастика:
фэнтези
боевая фантастика
попаданцы
6.12
рейтинг книги
Артефактор. Шаг в неизвестность

Воин-Врач

Дмитриев Олег
1. Воин-Врач
Фантастика:
попаданцы
альтернативная история
историческое фэнтези
6.00
рейтинг книги
Воин-Врач

Печать мастера

Лисина Александра
6. Гибрид
Фантастика:
попаданцы
технофэнтези
аниме
фэнтези
6.00
рейтинг книги
Печать мастера

Бестужев. Служба Государевой Безопасности. Книга четвертая

Измайлов Сергей
4. Граф Бестужев
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бестужев. Служба Государевой Безопасности. Книга четвертая

Проклятый Лекарь

Молотов Виктор
1. Анатомия Тьмы
Фантастика:
фэнтези
5.00
рейтинг книги
Проклятый Лекарь

Олд мани

Голд Яна
Любовные романы:
современные любовные романы
остросюжетные любовные романы
фемслеш
5.00
рейтинг книги
Олд мани

Эпоха Опустошителя. Том IV

Павлов Вел
4. Вечное Ристалище
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Эпоха Опустошителя. Том IV