2010-11-13 3 views
7

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

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

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

ответ

5

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

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

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

+0

Итак, я должен сделать джейлбрейк на своем устройстве, чтобы он работал? – adruzh

+1

@adruzh Да, вы это делаете, эта команда не работает на unjailbroken устройстве :( –

+0

он отлично работает в джейлбрейк-устройстве. –

3

Это не поддерживается iOS. Per the relevant section of Apple's iOS Programming Guide:

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

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

...

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

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

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

4

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

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

Смежные вопросы