Элементы управления музыкальным проигрывателем в виджете «Сегодня» в iOS 8

Я пытаюсь реализовать образец виджета iOS 8 Today, который включает в себя элементы управления музыкальным проигрывателем, приложение представляет собой базовое музыкальное приложение с включенным фоновым звуком.

Я много искал, чтобы найти способ уведомления о содержащем приложении, но не нашел!.

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

Основано на документации Apple и этом документе, описывающем сценарии использования: https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensibilityPG.pdf

В нем упоминается, что расширения не должны обрабатывать какое-либо длительное выполнение, и конкретно указывается воспроизведение звука как неподдерживаемый случай, поскольку оно должно работать вне расширения. но он не упомянул способ запуска содержащего приложение в таком сценарии, он просто упомянул метод NSURLSession, который может обрабатывать загрузку больших файлов и приложение пробуждения в фоновом режиме для вызова handleEventsForBackgroundUrlSession, а также возможности совместного использования App-Group, где могут использоваться как содержащее приложение, так и расширение. получить доступ к общему контейнеру данных. Единственным заявленным возможным решением является решение openURL, которое принудительно переводит все приложение на передний план.

Я настроил одну группу приложений для своей демонстрации и попробовал вызовы NSNotificationCenter с использованием настраиваемого уведомления, вызвав addObserver/postNotificationName для содержащего приложение и расширение соответственно, но это вообще не сработало. Вместо этого я даже пытался изменить NSUserDefaults для App-Group, но это также не срабатывает при содержании фона приложения.

Вот несколько вопросов, которые могут быть связаны, но я не нашел в нем ответа: (Обмен данными между расширением приложения и приложением conainer) --- (NSUserDefaultsDidChangeNotification не отправляется, когда приложение возобновляет работу в фоновом режиме) --- (Установить уведомления из виджета расширения «Сегодня»)

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

Спасибо.


person user3598408    schedule 13.10.2014    source источник


Ответы (1)


Вопрос в том, хотите ли вы воспроизвести какое-то пользовательское аудио или просто треки из музыкального проигрывателя iOS?

Мне кажется, что TapTunes использует стандартный музыкальный проигрыватель. Я думаю, это можно сделать с помощью MPMusicPlayerController (https://developer.apple.com/library/ios/documentation/MediaPlayer/Reference/MPMusicPlayerController_ClassReference/)

Если вы хотите воспроизвести собственное аудио, обычно у вас включен специальный фоновый режим аудио (см. здесь: http://www.raywenderlich.com/29948/backgrounding-for-ios) и иметь обратный вызов, который постоянно вызывается для подачи новых аудиоданных, например исходящие из Интернета. Возможно, вы могли бы просто наблюдать ключ NSUserDefault в обратном вызове, который сообщает вам текущее действие («следующая дорожка», «предыдущая дорожка» и т. д.). Я предполагаю, что это может привести к некоторым задержкам до фактического выполнения действия.

В любом случае, не удивляйтесь, если виджет будет отклонен App Store, поскольку в последнее время они, кажется, очень осторожны с виджетами, которые не следуют обычной концепции «покажите мне краткую информацию». То, что TapTunes был одобрен, не означает, что ваше приложение также будет одобрено.

person Markus    schedule 09.11.2014