【问题标题】:Show some UI from background in audio player or VOIP app on iOS在 iOS 上的音频播放器或 VOIP 应用程序中从背景显示一些 UI
【发布时间】:2012-07-17 22:06:18
【问题描述】:

我知道音频播放器和 Voip 应用程序可以在 iOS 上后台运行。

有没有办法从后台显示 UI(LocalNotifications 除外)?我的意思是全屏用户界面。

使用私有 API 或其他技巧的方法是可以接受的。该应用程序将使用企业证书进行签名,并且不会被 AppStore 部署/审核。

仅适用于越狱的 iOS 设备的方法是不可接受的。

【问题讨论】:

  • 如果您正在显示全屏 UI,那么它不在后台......
  • 这是我的主要观点。我希望能够从后台切换到前台。
  • 本地通知有什么问题?本地通知和推送通知专门针对这种情况。您在后台有一个应用程序,发生了一些可能使用户想要将应用程序带到前台的事情,因此您显示了一个通知。然后他们点击按钮,应用程序被带到前台。请解释你想要的有什么不同 - 一定有我不理解的地方。
  • 2ajh158:本地和远程通知让用户知道发生了什么事。但是,是否要启动某些应用程序是用户的选择。用户可以忽略通知并继续做他/她正在做的事情。我需要一个解决方案,要求/强制用户与 UI 交互。
  • 没有办法解决这个问题。如果设备没有被引导访问设置锁定,用户应该执行对应用程序启动的控制。可能存在一些私有 API hack,但它们很可能会在不同版本之间中断。

标签: ios voip iphone-privateapi


【解决方案1】:

查看此文档并搜索“实现长时间运行的后台任务”基本上您需要注册您的应用程序以在后台运行,而不是被暂停并监听通知。

来自文档: " 应用程序使用其 Info.plist 文件声明对服务的支持。将 UIBackgroundModes 键添加到您的 Info.plist 文件中" 和 ".....values 让系统知道您的应用程序应该在适当的时间被唤醒以做出响应到相关事件。”

http://developer.apple.com/library/ios/#DOCUMENTATION/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html#//apple_ref/doc/uid/TP40007072-CH4-SW20

【讨论】:

  • 谢谢。我阅读了这份文件。它包含有关如何在后台运行的信息。然而,“在适当的时候醒来”仅仅意味着系统只是让应用程序知道一些事件。问题是如何显示 UI 以响应这些事件。
  • 如果当您在其中一个事件上有一个监听器时,您会执行诸如弹出警报框之类的操作?
  • 什么也没发生。它不显示警报。如果我尝试使用 URL 启动某些应用程序,情况也是如此。据我了解,Springboard 管理显示哪个应用程序。其余应用程序使用屏幕外缓冲区。因此,用户看不到任何 UI。
  • 从我阅读的内容来看,您似乎已向操作系统注册,因此当 XYZ 发生时,它会唤醒您的应用程序。您的代码不能强制应用从后台唤醒,它只能在操作系统决定唤醒您的应用后响应 applicationDidBecomeActive: 事件。我不确定告诉操作系统您希望在 XYZ 发生时被唤醒的详细信息。我通过阅读此页面收集了大部分内容:codeproject.com/Articles/124159/… 它如何提供帮助。
  • 希望它有所帮助,而不是“它如何帮助”
【解决方案2】:

Victor,您是否尝试过一些技巧,例如为您的应用定义自定义 URL?

Springboard 可以在解析自定义 URL 时启动应用程序;如果他们在后台,他们就会成为前台。

您必须在您的应用的 info.plist 中的 CFBundleURLTypes 键中创建一个 URL 类型,例如“mySpecialURLType”。您的应用程序委托还必须实现 handleOpenURL:openURL:sourceApplication:annotation:

如果你(在你的后台任务中)请求一个像“mySpecialURLType://”这样的 URL,理论上 SpringBoard 会启动你的应用程序。

我不知道它是否有效,但值得一试......

最好的!

【讨论】:

  • 谢谢。好主意:) 但是,我之前尝试过,我发现如果应用程序在前台,那么它可以做到(新启动的应用程序将成为前台)。如果应用程序是后台 - 什么都不会发生。
  • 嗯。我很害怕……只要我知道在 iOS 5 下这似乎是不可能的。你是在 Apple Developer 论坛上发布的吗?我会继续思考......
  • 我会尝试把它贴在那里。但是,根据我以前的经验,开发人员不太喜欢此类(私有 API)问题。
猜你喜欢
  • 2013-07-02
  • 2014-04-30
  • 2016-05-16
  • 1970-01-01
  • 2012-05-12
  • 1970-01-01
  • 2016-08-30
  • 1970-01-01
  • 2015-10-03
相关资源
最近更新 更多