UILocalNotification, как вызвать определенный метод, если приложение находится в фоновом режиме - PullRequest
2 голосов
/ 04 февраля 2012

Я создаю приложение проигрывателя, которое воспроизводит аудиопотоки через интернет. Я хочу добавить функцию будильника в мое приложение - в частности, когда мой проигрыватель начинает воспроизводить аудиопоток, я пытаюсь использовать механизм UILocalNotification. Но у меня возникают трудности с этим, когда мое приложение работает в фоновом режиме, я не могу вызвать метод play, когда получено уведомление (не может без взаимодействия с пользователем). Может быть, это невозможно?

Но я купил это приложение: http://itunes.apple.com/us/app/radio-alarm-clock-mp3-radio/id380271167?mt=8 И кажется, что радио может начать играть, когда получено локальное уведомление. Будильник может начать воспроизведение радио, когда мое приложение находится в фоновом режиме. Ранее я пытался использовать NSTimer для этого, но когда мое приложение переходит в фоновый режим, таймер останавливается. Если я использую beginBackgroundTaskWithExpirationHandler: это работает только 10 минут. Мое приложение имеет специальный флажок в списке, который является аудио-приложением, и может воспроизводить музыку в фоновом режиме. В этом случае таймеры работают. Но если я перестаю играть и ухожу в фон, таймер не работает. Когда я использую приложение \ Radio Alarm Clock ', я слышу "белый шум" из динамического звука, когда музыка не воспроизводится. Может быть, это секрет этого приложения? Можете ли вы помочь мне с моей проблемой? Спасибо.

Ответы [ 2 ]

2 голосов
/ 19 марта 2012

может быть, уже слишком поздно.
Я посмотрел на приложение, которое вы упомянули на http://itunes.apple.com/us/app/radio-alarm-clock-mp3-radio/id380271167?mt=8, и да, я думаю, что вы абсолютно правы, единственный способ добиться того, чтобы приложение оставалось активным в фоновом режиме, - это воспроизводить фальшивый звук, пока он на заднем плане, что должно быть запрещено Apple.

Я также видел, что они не используют дистанционное управление iPod, и это было странно на первый взгляд.
В конце концов, я считаю, что они делают следующее:

  • Избегайте вызова beginReceivingRemoteControlEvents, который позволяет активировать элементы управления iPod в фоновом режиме (на самом деле их нет)
  • Таким образом, в строке состояния не отображается значок воспроизведения, пока приложение воспроизводит аудио
  • Когда приложение работает в фоновом режиме, оно, вероятно, периодически воспроизводит звук (например, раз в 10 секунд), таким образом, приложение остается активным
  • Я видел, что они также избегали управления прерываниями, например, в случае, если другое приложение находится на переднем плане и воспроизводит музыку. И снова Apple должна была отклонить приложение по этой причине, потому что это противоречит правилам, которым они должны следовать в фоновом режиме, но, возможно, они не увидели его во время приемочных испытаний.

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

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

0 голосов
/ 05 февраля 2012

Вы пытались добавить это в appdelegate.m

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
    // Call your method in here.
}

если у вас есть, вы можете добавить код, чтобы мы могли видеть, что вы делаете.

...