7

在我的 iOS 4 应用程序中,我需要在用户指定的时间从后台打开一个 URL。但是,由于某种原因,我无法从后台启动 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 的方法,它可以在后台运行,那也会很有帮助。

4

3 回答 3

5

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

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

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

于 2010-11-13T18:45:48.860 回答
4

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

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

于 2010-11-13T00:57:29.777 回答
3

iOS 不支持此功能。根据Apple 的 iOS 编程指南的相关部分

对某些类型的后台执行的支持必须由使用它们的应用程序提前声明[通过]一个包含一个或多个具有以下值的字符串的数组:

  • 音频 - 应用程序在后台向用户播放可听内容。
  • 位置 - 应用程序让用户了解他们的位置,即使在后台运行时也是如此。
  • voip - 该应用程序使用户能够使用 Internet 连接拨打电话。

...

除了前面的键之外,iOS 还提供了另外两种在后台工作的方法:

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

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

于 2010-11-13T00:57:29.610 回答