UIApplication openURL背景

时间:2010-11-13 00:47:00

标签: iphone objective-c background openurl fast-app-switching

在我的iOS 4应用程序中,我需要在用户指定的时间从后台打开一个URL。但是,出于某种原因,我无法出于某种原因从后台启动URL。这是我打开网址的代码:

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,那将在后台运行,这也很有帮助。

3 个答案:

答案 0 :(得分:5)

我相信我找到了它(在模拟器上不起作用,因为它将命令传递给mac上的终端,因为模拟器没有命令行)。使用此:

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

这会将命令uiopen(通过越狱找到)传递给设备,强制它打开该URL。我希望这有助于我的职位。

答案 1 :(得分:4)

UIKit调用只能在主线程上运行。我认为因为这是在后台线程上运行,Safari仍然访问URL,您的应用仍处于活动状态。不久之后尝试打开Safari,看看它是否加载了URL。

解决方案是将它放在主线程上,从而在代码运行时离开你的应用程序。这听起来不像你想要的那样,抱歉。如果您想访问您的应用中的网址,您可以展示UIWebView。

答案 2 :(得分:3)

iOS不支持此功能。每the relevant section of Apple's iOS Programming Guide

  

支持某些类型的背景   执行必须提前申报   由使用它们的应用程序   [via]包含一个的数组   或更多字符串与以下内容   值:

     
      
  • audio - 应用程序在播放时向用户播放可听内容   背景。
  •   
  • 位置 - 应用程序可以让用户随时了解他们的位置   在后台运行时。
  •   
  • voip - 该应用程序为用户提供了打电话的能力   使用互联网连接拨打电话。
  •   
     

...

     

除了上述键,iOS   提供了另外两种工作方式   背景:

     
      
  • 应用程序可以要求系统有额外的时间来完成给定的任务。
  •   
  • 应用程序可以安排在a处发送本地通知   预定时间。
  •   

您的使用不符合任何允许的多任务类型。