如何在后台状态下获取传入/传出呼叫事件

时间:2016-08-01 10:07:58

标签: ios swift core-telephony

在我的一个应用程序中,它具有播放声音的功能,这是我成功实现的。即使应用程序正在运行(前台状态)并且我们收到来电,应用音乐也会停止,并在呼叫断开时再次恢复。

现在真正的问题在这里。当应用程序进入后台状态时,我们没有收到任何传入/传出呼叫事件。在后台模式中如果音乐正在我的应用程序内播放并且我们接到任何来电,则应用音乐会自动停止,但与iPhone音乐应用程序不同,当呼叫断开时不会再次恢复。

这是iOS的限制还是我们可以实现的?

注意:我没有为越狱设备或企业应用寻找任何解决方案

1 个答案:

答案 0 :(得分:1)

您是否尝试过在AppDelegate类中创建呼叫中心并分配处理程序块?以下必须工作。

import UIKit
import CoreLocation

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    let callCenter: CTCallCenter = CTCallCenter()

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

        window = UIWindow(frame: UIScreen.mainScreen().bounds)
        window?.rootViewController = ViewController()
        window?.makeKeyAndVisible()

        callCenter.callEventHandler = {

            (call: CTCall!) in

                switch call.callState {

                    case CTCallStateConnected:

                        print("CTCallStateConnected")

                    case CTCallStateDisconnected:

                        print("CTCallStateDisconnected")

                    case CTCallStateIncoming:

                        print("CTCallStateIncoming")

                    default:

                        print("default")

                }

        }

        return true

    }

}

不要忘记为此启用背景模式。并且在后台执行某些操作,就像接收位置一样。