2011-08-19 4 views
0

Я пишу аудио-приложение, которое воспроизводит медиа-элементы из музыкальной библиотеки iPod с помощью музыкального плеера iPod.Возможно ли запустить NSThread или NSTimer на устройстве iOS 4, когда он войдет в фоновое состояние?

Теперь я знаю, что iPod может продолжать воспроизведение, когда он находится в фоновом режиме, но я также хочу запустить либо Thread, либо Timer в фоновом режиме, где метод выбора периодически проверяет состояние музыки чтобы приложение могло применять правила для применения задержек между дорожками и автоматически загружать новые медиа-коллекции в плеер все в фоновом режиме.

Возможно ли это?

Если нет, есть ли другой способ достижения этой функциональности?

ответ

1

Хитрость заключается в том, чтобы не использовать MPMusicPlayerController как когда приложение входит в фон он фактически передает управление в приложение IPOD (вы можете проверить это, закрыв приложение и откройте приложение IPOD).

Для музыкального приложения я в настоящее время разрабатывает я помотал собственный музыкальный плеер с помощью AVAudioSession и AVPlayer (неAVAudioPlayer). Я реализовал очередь на проигрывателе и источник данных (, похожий наUITableViewDatasource), который передает очередь. Все это красноречиво работает во время работы в фоновом режиме и не имеет никакого отношения к тому, что когда-либо было с iPod-приложением (), а в качестве дополнительного бонуса значок приложения появляется рядом с пультом дистанционного управления на панели mulitasking).

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

+0

Спасибо, это звучит интересно, но как вы на самом деле используете код в фоновом режиме?Вы используете поток или задачу? iOS 4, по-видимому, довольно строг, о том, какие службы он позволит постоянно запускать в фоновом режиме. Документы состоят именно из музыкального плеера iPod, местоположения gps и VoIP. Имея это в виду, как вы могли реализовать свой музыкальный плеер, чтобы обновить свою очередь на лету и т. Д. Во время работы в фоновом режиме? – Sabobin

+0

Нет, [docs] (http://developer.apple.com/library/iOS/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html#//apple_ref/doc/uid/TP40007072-CH5-SW14) состояние ** аудио ** не iPod музыкальный проигрыватель. –

+0

О, так вы говорите, потому что это аудио-сервис, ОС держит его в рабочем состоянии. – Sabobin

0

Несомненно. Вы можете сделать это в делете делегата приложения applicationDidEnterBackground:.

Из шаблона:

Если ваше приложение поддерживает выполнение фона, этот метод вызывается вместо applicationWillTerminate: когда пользователь завершает работу.

+0

Мне известно о приложенииDidEnterBackground: но даже если бы мне нужно было установить таймер или поток в этом методе, не будут ли они закрыты вместе с циклом основного запуска процессов, когда приложение войдет в фоновое состояние? – Sabobin

+0

Это не предсказуемо. Когда у телефона заканчивается память из-за какого-либо другого приложения, он отключит все фоновые приложения, включая Mail и т. Д. Но пока есть достаточно памяти, он должен просто продолжить. – Mundi

+0

Интересно, я дам ему попробовать, спасибо за предложение. – Sabobin

0

Ну да, и теперь вы не можете использовать NSTimer, потому что они признаны недействительными. Вы можете запустить блок кода для запуска через GCD для запуска в фоновом режиме, который будет иметь макс. время выполнения 10 мин.

+0

Хорошо, я хочу, чтобы правила применялись к музыкальному проигрывателю в течение всего времени работы приложения в фоновом состоянии, возможно ли это? – Sabobin

+0

Ну, вы можете указать, что вам нужно играть аудио в фоновом режиме. iOS позволит вашему приложению продолжать работать, пока идет сеанс аудио. Невозможно пройти через 10 минут. max выполнения фона. – rckoenes

+0

Спасибо за информацию. – Sabobin