Как сохранить мое приложение более 10 минут. на заднем фоне? - PullRequest
4 голосов
/ 13 марта 2012

Я знаю, что в iOS могут выполняться только фоновые приложения

  • Задачи конечной длины (10 минут)
  • Обновления местоположения
  • VoIP
  • Аудио

Есть ли способ для моего приложения избежать завершения после 10 мин.на заднем фоне?Я не буду отправлять свое приложение в магазин приложений, поэтому все разрешено (частные фреймворки, использующие gps, даже если мне это не нужно). Я знаю, что Apple не рекомендует этого, но это только для целей мониторинга.Мне нужно, чтобы он работал без ограничений.

Я исследовал несколько возможностей, включая VoIP, но он дает мне только 30 секунд каждые 10 минут, что недостаточно.Я также читал этот пост: iPhone - Фоновый рисунок для опроса событий , в котором JackPearse указал способ «оживить» 10-минутную задачу конечной длины, используя 30-секундную задачу VoIP.Но я не хочу, чтобы моя задача начиналась и заканчивалась каждые 10 минут, она должна выполняться непрерывно.Я также попробовал его UPDATE2, но он не работает для меня.Я даже пытался перехватить UIEvent с GSEvent.type 2012, который, казалось, завершил мою фоновую задачу, но безуспешно.Как ни странно, моя фоновая задача никогда не завершается, когда у меня открыт и отлаживается Xcode, но когда я этого не делаю (тестирую только симулятор), она заканчивается через 10 минут.

Ответы [ 2 ]

1 голос
/ 22 мая 2012

Я узнал, как сохранить приложение в фоновом режиме более 10 минут, непрерывно воспроизводя песню в фоновом режиме.На AppDidFinishLauching:

[[AVAudioSession sharedInstance] setActive:YES error:&error];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error];
NSURL *url = [NSURL fileURLWithPath:...]; //Song URL
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];

player.numberOfLoops = -1;
[player play];

В AppDidEnterBackground вы можете выполнить селектор в фоновом режиме, который может длиться вечно.Приложение не будет прервано, вы можете проверить UIApplication backgroundtimeRemaining и убедиться, что оно никогда не уменьшается.

Конечно, объявите приложение как приложение фонового аудио в списке.

1 голос
/ 13 марта 2012

Я уже пробовал каким-то образом ( nsrunloop , * executeselectoronmainthread *) вот так. Это хорошо работает в симуляторе (не в устройстве, потому что яблоко зависает автоматически после иногда), когда приложение переходит в фоновый режим.

status является переменной BOOL.

- (void)applicationDidEnterBackground:(UIApplication *)application {

    while (!**status**) {
        [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:60.0]];
        [self goBackground];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...