代码之家  ›  专栏  ›  技术社区  ›  Richard J. Ross III

UIApplication openURL背景

  •  7
  • Richard J. Ross III  · 技术社区  · 13 年前

    在我的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,或者这是一个bug或未记录的特性。此外,如果有其他方法打开URL,这将在后台工作,这也将是有益的。

    3 回复  |  直到 13 年前
        1
  •  5
  •   Richard J. Ross III    13 年前

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

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

    会通过命令的 uiopen (通过越狱找到)到设备,迫使它打开那个URL。我希望这能帮助其他处于我位置的人。

        2
  •  4
  •   fearmint    13 年前

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

    解决方案是将这个放在主线程上,从而在运行代码时离开应用程序。听起来不像你想要的,对不起。如果您想访问来自 在内部 你的应用你可以呈现一个UIWebView。

        3
  •  3
  •   Tommy    13 年前

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

    支持某些类型的背景 必须提前宣布执行 通过使用它们的应用程序 [通过]包含一个 或更多具有以下内容的字符串 价值观:

    • 音频-应用程序在进入时向用户播放音频内容 背景。
    • 位置-应用程序让用户随时了解自己的位置,甚至 在后台运行时。
    • voip-应用程序为用户提供打电话的能力 使用Internet连接的呼叫。

    ...

    除了前面的密钥,iOS 提供其他两种工作方式 背景:

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

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