UIApplication openURL фон

В моем приложении для iOS 4 мне нужно открыть URL-адрес из фона в указанное пользователем время. Однако по какой-то причине я не могу запустить URL-адрес из фона по какой-то причине. Вот мой код для открытия URL:

if (![[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.stackru.com"]])
{
     // the URL wasn't opened. we will ignore this for now.
}

Этот код запускается из потока демона, созданного ранее. Я проверил этот код на симуляторе, и URL-адрес не открывается, и метод возвращает YES по какой-то причине, но когда я снова открываю свое приложение (через быстрое переключение приложений), оно открывает URL. Есть ли какой-то способ заставить мое приложение снова выйти на передний план в этот момент (не через локальное уведомление), чтобы URL мог открыться, или это ошибка или недокументированная функция. Кроме того, если есть другой способ открыть URL, который будет работать в фоновом режиме, это также будет полезно.

3 ответа

Решение

Я считаю, что нашел его (не работает на симуляторе, потому что он передает команды на терминал на Mac, так как для симулятора нет командной строки). Использовать этот:

system([[NSString stringWithFormat:@"uiopen \"%@\"", myUrlToOpen] UTF8String]);

Это пройдет команда uiopen (найден через джейлбрейк) на устройство, заставляя его открыть этот URL. Я надеюсь, что это помогает другим в моем положении.

Вызовы UIKit могут выполняться только в главном потоке. Я думаю, что поскольку это выполняется в фоновом потоке, Safari все еще посещает URL, но ваше приложение все еще активно. Попробуйте открыть Safari вскоре после этого и посмотрите, загрузил ли он URL.

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

Это не поддерживается iOS. В соответствующем разделе Руководства Apple по программированию для iOS:

Поддержка некоторых типов фонового выполнения должна быть заранее объявлена ​​приложением, которое использует их [через] массив, содержащий одну или несколько строк со следующими значениями:

  • аудио - приложение воспроизводит звуковой контент для пользователя в фоновом режиме.
  • местоположение - приложение информирует пользователей об их местонахождении даже в фоновом режиме.
  • voip - Приложение предоставляет возможность пользователю совершать телефонные звонки, используя подключение к Интернету.

...

В дополнение к предыдущим клавишам iOS предоставляет два других способа работы в фоновом режиме:

  • Приложения могут запросить у системы дополнительное время для выполнения данной задачи.
  • Приложения могут планировать локальные уведомления для доставки в заранее установленное время.

Ваше использование не соответствует ни одному из разрешенных типов многозадачности.

Другие вопросы по тегам