applicationMusicPlayer останавливается, когда пользователь блокирует экран на iOS 5

Я установил категорию аудиосессии kAudioSessionCategory_MediaPlayback, я активировал сессию, которая не возвращает ошибок, и музыка iPod все равно останавливается, когда я блокирую устройство. Это происходит на iOS 5 GM, поэтому я предполагаю, что это произойдет в финальной версии. На iOS 4+ текущий код работает нормально. Любые идеи, как это исправить? Огромное спасибо :)


person cpprulez    schedule 05.10.2011    source источник
comment
На iOS 5 по-прежнему распространяется соглашение о неразглашении, поэтому большинство людей, знающих об этом, не будут отвечать публично. Вы можете попробовать посетить форумы разработчиков Apple.   -  person Stephen Darlington    schedule 05.10.2011
comment
Хороший вопрос :) Спасибо!   -  person cpprulez    schedule 05.10.2011
comment
Имея аналогичную проблему, проблема размещена здесь: devforums.apple.com/message/561581#561581 Я думаю, что это ошибка в iOS 5.   -  person    schedule 18.10.2011
comment
На самом деле, я думаю, что это ошибка в XCode 4.2. Я скомпилировал точно такой же код с XCode 4.1, и он отлично работает на устройстве, даже под управлением iOS 5.0.   -  person cpprulez    schedule 18.10.2011


Ответы (2)


Это не ошибка. Для экономии энергии блокировка телефона теперь обрабатывается так, как если бы пользователь нажал кнопку «Домой». Тот факт, что applicationMusicPlayer теперь останавливается при блокировке, является лишь побочным эффектом этого изменения.

Чтобы обойти эту проблему, вы должны переключиться на AVPlayer и использовать звук iOS 4 в фоновом режиме.

person voidStern    schedule 19.10.2011
comment
Спасибо, ВойдСтерн! Я пытался использовать AVPlayer, но он все еще отключается, когда устройство заблокировано. Я понимаю, почему iOS 5 отправляет приложение в фоновый режим, но я думаю, что они должны уважать категорию аудиосессии, установленную для воспроизведения мультимедиа, и, по крайней мере, продолжать воспроизводить звуки... Есть другие идеи? Еще раз спасибо! - person cpprulez; 30.11.2011
comment
Вы установили категорию фонового звука в своем info.plist? Если вы все сделали правильно, игра должна продолжаться, даже если вы выйдете из приложения с помощью кнопки «Домой». (Если вы не хотите этого, вам придется остановить воспроизведение в делегате приложения) - person voidStern; 30.11.2011
comment
Я сделал, и это все еще останавливается. Но в моем случае проблема в том, что звуки останавливаются при блокировке экрана, это нормально, что звук останавливается при нажатии кнопки домой. - person cpprulez; 30.11.2011
comment
... но поскольку iOS5 блокирует экран и нажимает кнопку «Домой», это буквально одно и то же, что касается ваших приложений. - person voidStern; 30.11.2011
comment
да, к сожалению... Единственные решения, которые я нашел до сих пор, не очень хороши: 1. Скомпилируйте с помощью XCode ‹ 4.2, но это означает, что я не смогу использовать какие-либо новые функции iOS 5. 2. Отметить приложение как не работающее в фоновом режиме, но в моем случае это еще хуже... - person cpprulez; 30.11.2011

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

В OS4 приложение делает «applicationWillResignActive», но в OS5 оно доходит до «applicationDidEnterBackground», который выглядит точно так же, как пользователь, нажимающий кнопку «Домой».

Оказывается, если вы проверите UIApplicationState приложения, указанное в '- (void)applicationDidEnterBackground:(UIApplication *)application', оно имеет 3 возможных значения:

typedef enum {
   UIApplicationStateActive,
   UIApplicationStateInactive,
   UIApplicationStateBackground
} UIApplicationState;

Когда пользователь попадает домой в OS5, вы получаете UIApplicationStateBackground, но когда пользователь нажимает Lock, вы получаете UIApplicationStateInactive.

Надеюсь, это поможет.

С праздником всех.

person Andrew Bennett    schedule 23.12.2011