Обогащение опыта AirPlay в приложении

Существует несколько способов, которыми можно предоставить более богатый опыт пользователям, когда они используют AirPlay с приложением:

Обеспечьте средство выбора AirPlay

Пользователь может перейти к системе средство выбора AirPlay в интерфейсе многозадачности iOS для выбора вывода AirPlay, как проиллюстрировано на рисунке 3-1. Если устройство вывода AirPlay доступно, кнопка AirPlay появляется рядом с регулятором громкости; ответвление кнопки выводит на экран список доступных устройств.

  Система рисунка 3-1 средство выбора AirPlay

Если Ваше приложение играет носители, Вы могли бы хотеть обеспечить средство выбора вывода AirPlay в своем приложении так, чтобы пользователь не изменял фокус. Можно добавить средство выбора AirPlay к управлению воспроизведением носителей при помощи MPVolumeView, как показано в следующем фрагменте кода:

MPVolumeView *volumeView = [ [MPVolumeView alloc] init] ;
[view addSubview:volumeView];

Если Вы имеете пользовательский контроллер среды передачи и не хотите использовать стандартный контроллер объема, можно добавить просто средство выбора AirPlay с помощью следующего фрагмента кода:

MPVolumeView *volumeView = [ [MPVolumeView alloc] init] ;
[volumeView setShowsVolumeSlider:NO];
[volumeView sizeToFit];
[view addSubview:volumeView];

Средство выбора видимо только, когда существует доступное устройство вывода AirPlay.

Отправьте аудио, где оно принадлежит

Приложения обычно используют два типа звука — аудио приложения (такие как окружающие звуки, фоновая музыка, и несущественные шумы) и системные звуки (такие как щелчки клавиши и предупреждают звуки). AirPlay пытается поставить аудио приложения удаленной аудиосистеме при хранении системных звуков на узле, так, чтобы звуки обратной связи остались локальными для устройства ввода данных.

Если Ваше приложение использует системный звук APIs для аудио приложения, AirPlay не перенаправляет их к Поддерживающей трансляцию аудиосистеме. Результатом является меньше оптимальный пользовательский опыт. Важно использовать системный звук APIs только для системных звуков. Для аудио приложения используйте APIs такой как AVAudioPlayer.

Обеспечьте аудио метаданные

Ваше аудио могло бы играть в системе домашнего кинотеатра большого экрана или в аудиосистеме с жидкокристаллическим дисплеем. Ваше приложение дает лучший пользовательский опыт при обеспечении метаданных, которые могут быть показаны на дисплее устройства AirPlay, таком как имя художника, заголовок песни и искусство альбома.

Добавьте метаданные путем передачи словаря в setNowPlayingInfo метод MPNowPlayingInfoCenter. MPNowPlayingInfoCenter класс является частью MediaPlayer платформа, но работы со всеми платформами воспроизведения, включая MediaPlayer, AVFoundation, и AudioQueue.

В дополнение к обеспечению обычных строк информации о песне необходимо также передать в скорости воспроизведения, прошедшее время и продолжительность элемента носителей. Устройство воспроизведения может использовать продолжительность и скорость воспроизведения для создания индикатора выполнения. Обновите прошедшее время и скорость воспроизведения каждый раз, когда изменяется скорость воспроизведения.

Реагируйте на удаленные события

Когда AirPlay используется, Ваши носители могли бы играть в другой комнате от Вашего устройства хоста. Устройство вывода AirPlay могло бы иметь свои собственные средства управления или реагировать на дистанционное управление Apple. Для лучшего пользовательского опыта Ваше приложение должно прислушаться и реагировать на удаленные события, такие как игра, пауза и запросы ускоренной перемотки. Включение удаленных событий также позволяет Вашему приложению реагировать на средства управления на наушниках или наушниках, включающихся в устройство хоста.

Используйте следующий фрагмент кода для получения удаленных событий:

- (BOOL) canBecomeFirstResponder {return YES;}
- (void) viewDidAppear: (BOOL) animated {
    [super viewDidAppear:animated];
    [ [UIApplication sharedApplication] beginReceivingRemoteControlEvents];
    [self becomeFirstResponder];
}

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

- (void) viewWillDisappear: (BOOL) animated {
    [super viewWillDisappear:animated];
    [ [UIApplication sharedApplication] endReceivingRemoteControlEvents];
    [self resignFirstResponder];
}

Реагируйте на события типа UIEventTypeRemoteControl и подтипы, подходящие для Вашего приложения. Следующий фрагмент кода дает пример:

- (void) remoteControlReceivedWithEvent: (UIEvent *) receivedEvent {
    if (receivedEvent.type == UIEventTypeRemoteControl) {
        switch (receivedEvent.subtype) {
            case UIEventSubtypeRemoteControlTogglePlayPause:
                [self playPauseToggle: nil]
                break;
            case UIEventSubtypeRemoteControlNextTrack:
                [self nextTrack: nil]
                break;
...

Посмотрите UIEvent.h для перечисления подтипов события.