10

我想知道是否有可能检测用户是否正在从当前处于后台的应用程序中调用。

或者,如果呼叫是从我的应用程序发起的,则在呼叫结束时收到通知。

或者,更重要的是 - 是否有可能检测到哪个应用程序在前台?
我不相信这是可能的,但我不得不尝试...... ;-)

任何信息将不胜感激。

谢谢你。

4

2 回答 2

20

CTCallCenter中,有一个方法,callEventHandler您可以传递一个在调用事件发生时将被调用的块。在此块中,您将被传递一个CTCall对象,并且可以获取callState. 因此,您可以在通话开始或结束时收到通知,并进行适当的处​​理。您无法得知是哪个应用程序发起了呼叫,但如果您在拨打电话时设置了 ivar,则可以判断是您的应用程序拨打了电话。

例如:

CTCallCenter *callCenter = [[CTCallCenter alloc] init];
callCenter.callEventHandler=^(CTCall* call){
    if (call.callState == CTCallStateDisconnected)
    { 
        //handle disconnect
    }
};

编辑:重新阅读您的问题,您希望在被停职期间进行这些活动,对吗?我不认为这是可能的。

文档

如果您的应用程序在调用事件发生时处于活动状态,则系统会立即将该事件分派给您的处理程序。但是,调用事件也可能在您的应用程序暂停时发生。当它被挂起时,您的应用程序不会收到呼叫事件。当您的应用程序恢复活动状态时,它会为每个更改状态的调用接收一个调用事件 - 无论您的应用程序暂停时调用经历了多少状态更改。当您的应用程序返回活动状态时,发送到您的处理程序的单个调用事件描述了当时调用的状态。

于 2010-07-23T16:24:12.623 回答
8

如果您的应用程序在后台运行并且正在进行 AVAudioSession,您将在AVAudioSessionDelegate上收到回调,告诉您在接到电话时您的 AVAudioSession 已被中断。AFAIK 这就是你得到的所有信息。

于 2010-07-23T16:24:48.370 回答