收到电话时更新屏幕的iPhone后台应用程序

R K*_*R K 7 iphone jailbreak ios core-telephony ios5

我们正在编写一个iPhone应用程序(将在后台),当接到来电时会收到通知.该应用程序执行一些后台工作 - 在电话会话正在进行时访问服务器检索某些数据,然后通知用户.

搜索之后,我发现我可以使用它Private Telephony Headers/Framework来实际知道谁在我的应用程序中调用.但是,我无法使用从服务器检索到的信息更新拨号程序屏幕.此外,我发现应用程序必须在电话到达时运行.牦牛!

我知道这不会在苹果商店批准,但我正在寻找两件事:

  1. 如何将此应用程序置于后台.
  2. 如何在通话过程中显示一些信息.本地通知没问题,但必须立即显示.

即使我们不得不越狱,我也想知道如何完成这项工作.这个应用程序是执法官员 - 概念证明.

Nat*_*ate 3

正如 YllierDev 所说,您可以研究 MobileSubstrate 调整来显示信息。但是,对于新手来说可能不那么令人畏惧的事情,您可以尝试以下操作:

  1. 首先,创建一个启动守护进程。它可以在后台运行并执行您喜欢的操作。它会在手机启动时启动,因此用户不需要先运行某些应用程序,然后将其放入后台。我发现这是构建 LaunchDaemon 的一个很好的例子

  2. 听起来您似乎已经知道如何使用核心电话框架的未记录功能来获取新呼叫的通知。这将是您的守护进程的职责。为了完整起见,请参阅此答案或有关守护程序如何侦听带有 Darwin 通知的呼叫的其他答案。

  3. 当调用被拦截时,您的守护进程可以联系您的服务器。

  4. 然后,您可以创建一个简单的弹出窗口,如下所示

CFOptionFlags responseFlags = 0;
CFUserNotificationDisplayAlert(20.0, 3, NULL, NULL, NULL, 
     CFSTR("Hello"), CFSTR("Hello World"), CFSTR("OK"), 
     NULL, NULL, &responseFlags);
Run Code Online (Sandbox Code Playgroud)

这是一些关于 CFUserNotifications 的 Apple 文档

您可能必须链接到CoreFoundation框架,并且可能需要将此标头包含在您的项目中才能CFUserNotificationDisplayAlert()使用。

但是,这应该会弹出一个包含动态呼叫数据的窗口。