Как начать воспроизведение звука в беззвучном режиме и при блокировке в iOS 6?

Процесс конечного пользователя

  1. Открыть приложение
  2. Включите «Бесшумный режим».
  3. Нажмите «кнопку блокировки»
  4. Приложение может НАЧАТЬ воспроизводить звук по прошествии нескольких часов, но не воспроизводить звук в промежутке.

Приложения, которые делают это

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

  • Будильник Pro
  • Мои часы
  • Волновой будильник
  • Тревога
  • iHome
  • ...

...Они поддерживают цикл после блокировки каким-то образом или это уведомление (которое не может воспроизводить звук в беззвучном режиме) запускает резервную копию приложения для воспроизведения звука, или какой-то другой метод?

Реализованы текущие методы

AVAudioPlayer с использованием:

AudioSessionInitialize(nil, nil, nil, nil);
AudioSessionSetActive(YES);

UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty (kAudioSessionProperty_AudioCategory, sizeof(sessionCategory),&sessionCategory);

И настройка Info.plist на:

Требуемые фоновые режимы (UIBackGroundModes) — приложение воспроизводит аудио (аудио)

В настоящее время

Я могу воспроизводить аудио даже в беззвучном режиме, когда приложение запущено и отображается на экране. Если звук уже запущен, приложение можно закрыть с помощью кнопки «Домой», и звук будет воспроизводиться. НО, если приложение не воспроизводит звук, а экран заблокирован, все потоки уничтожаются, а звук никогда не воспроизводится. Как этим приложениям удается обойти это?

Возможные подходы, найденные на данный момент

A. Используйте 'beginBackgroundTaskWithExpirationHandler:' с бесконечным циклом, чтобы приложение работало бесконечно.

Плюсы:

  • Похоже, вы можете заставить это работать во многих ситуациях, даже когда пользователь нажимает кнопку домой.

Минусы:

  • Насколько я могу судить, это противоречит политике Apple.
  • будет использовать больше ресурсов

Комментарии:

Я почти получил это, чтобы работать и мог бы с некоторой настройкой. Похоже, это не то, что делают все эти другие будильники, поскольку они не продолжают работать, если вы нажимаете домашнюю кнопку BTN. Что предполагает, что они используют какой-то метод, который дает им разрешение на запуск в заблокированном состоянии, но не в BG. (Это то, что мне нужно)

Кроме того, когда вы спрашиваете, сколько времени у вас осталось бегать, вы получаете примерно 10 минут.Добавив туда бесконечный цикл, числа фактически снизятся до 0, а затем станут отрицательными на несколько часов подряд. (Проверено). Я не уверен, как это будет вести себя в реальном мире или с точки зрения принятия приложения.

B. Использование бесшумной аудиопетли для представления медиацентра с непрерывным воспроизведением звука.

Плюсы:

  • Работает при блокировке и продолжает работать в большинстве ситуаций.

Минусы:

  • Может произойти сбой, если его прервет другой медиацентр и в некоторых других случаях.
  • Также можно пойти против политики Apple.

Комментарии:

Это может работать во многих ситуациях, но далеко не идеально. И поскольку, как я еще раз говорю, должен быть еще один метод, который не задокументирован.

Выводы на данный момент

Тестирование перечисленных приложений показало, что они не используют ни один из двух методов, которые я только что описал. Метод «А» кажется более близким, но если он будет реализован, он не будет вести себя так, как ведут себя эти приложения.

Я использовал билет разработчика Apple, чтобы получить больше информации, я также буду публиковать любые новые результаты с помощью этих средств.

Спасибо.

Мы ценим любую информацию и ваше участие.

46
задан Andres Canella 8 October 2012 в 02:49
поделиться