在我的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,那将在后台运行,这也很有帮助。
答案 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处发送本地通知 预定时间。
您的使用不符合任何允许的多任务类型。