Ответ на изменения маршрута

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

Варианты аудио аппаратного изменения маршрута

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

Рисунок 5-1 изображает последовательность событий для различных изменений маршрута во время записи и воспроизведения. Эти четыре возможных исхода, показанные через нижнюю часть числа, следуют из мер, принятых функцией обратного вызова слушателя свойства, которую Вы пишете.

Рисунок 5-1  , Обрабатывающий аудио аппаратные изменения маршрута
A flowchart representation of how Core Audio, and your property listener callback function, interact to provide good user experience upon an audio hardware route change.

В числе система первоначально определяет аудио маршрут после Ваших запусков приложения. Это продолжает контролировать активный маршрут как Ваше выполнение приложения. Рассмотрите сначала случай пользователя, касающегося Кнопки записи в Вашем приложении, представленном полем «Recording starts» на левой стороне числа.

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

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

Проект примера кода AddMusic демонстрирует, как реализовать часть воспроизведения этого поведения.

Ответ на аудио аппаратные изменения маршрута

Существует две части к конфигурированию Вашего приложения для ответа на изменения маршрута:

  1. Методы реализации, которые будут вызваны на изменение маршрута.

  2. Регистр для AVAudioSessionRouteChangeNotification уведомление для ответа на изменения маршрута.

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

Когда система отправляет уведомление изменения маршрута, она предоставляет информацию, которую необходимо выяснить который действие взять. Регистр для AVAudioSessionRouteChangeNotification уведомление как показано:

NSNotificationCenter *nc [NSNotificationCenter defaultCenter];
[nc addObserver:self
       selector:routeChanged:
           name:AVAudioSessionRouteChangeNotification
         object:nil];

После того, как уведомление получено, Ваше приложение вызывает метод, который Вы определяете, и изменяет его поведение на основе информации, содержавшей уведомлением. AVAudioSessionRouteChangeNotification содержит a userInfo словарь, описывающий:

Ключи для словаря AVAudioSessionRouteChangeReasonKey и AVAudioSessionRouteChangePreviousRouteKey. Различные причины, почему аппаратный маршрут аудио, возможно, изменился — полученный доступ AVAudioSessionRouteChangeReasonKey ключ — перечислен и описан в AVAudioSessionRouteChangeReason. Предыдущая маршрутная информация — полученный доступ AVAudioSessionRouteChangePreviousRouteKey ключ — является объектом, описывающим аудио настройку маршрута до изменения маршрута.

Одна причина аудио аппаратного изменения маршрута в iOS AVAudioSessionRouteChangeReasonCategoryChange. Другими словами, изменение в аудио категории сеанса, как полагает система — в этом контексте — является изменением маршрута и вызовет уведомление изменения маршрута. Как следствие, если Ваш метод ответа уведомления предназначается, чтобы только реагировать на включение гарнитуры и отключение, это должно явно проигнорировать этот тип изменения маршрута.

Вот практический пример. Правильно написанное приложение устройства записи/воспроизведения устанавливает аудио категорию сеанса при начале воспроизведения или записи. Из-за этого уведомление изменения маршрута отправляется после стартового воспроизведения (если Вы ранее записывали), или после запуска записи (если Вы ранее воспроизводили). Безусловно, такое приложение не должно приостанавливаться или останавливаться каждый раз, когда пользователь касается Записи или Игры. Для предотвращения несоответствующей приостановки или остановки метод, вызванный по получении уведомления, должен перейти на основе причины изменения маршрута и просто возвратиться, если бы это было изменение категории. В этом случае изменение категории с точки зрения системы а не перспективы приложения.