ios – 如何以编程方式检测呼入

我需要我的应用程序在有电话时发送通知(来电,已连接,通话已结束)
    我通过通知注册了我的viewController.

[[NSNotificationCenter defaultCenter] addobserver:self selector:@selector(callReceived:) name:CTCallStateIncoming object:nil];
    [[NSNotificationCenter defaultCenter] addobserver:self selector:@selector(callEnded:) name:CTCallStatedisconnected object:nil];
    [[NSNotificationCenter defaultCenter] addobserver:self selector:@selector(callConnected:) name:CTCallStateConnected object:nil];

我还提出了一种检查呼叫状态的方法

-(IBAction)checkForCall:(id)sender{
    NSLog(@"call state %@ id %@",call.callState,call.callID);
    CTCallCenter *callCenter = [[CTCallCenter alloc] init];
    callCenter.callEventHandler = ^(CTCall* call){
        if (call.callState == CTCallStatedisconnected)
        {
            NSLog(@"Call has been disconnected");

        }
        else if (call.callState == CTCallStateConnected)
        {
            NSLog(@"Call has just been connected");

        }
        else if(call.callState == CTCallStateIncoming)
        {
            NSLog(@"Call is incoming");

        }
        else
        {
            NSLog(@"None of the conditions");
        }
    };
}

但这一切都无效.请帮帮我.

哪里出错了?是否有任何代码告诉如何使用核心电话?

解决方法

用这个

Appdelegate.h

#import <CoreTelephony/CTCallCenter.h>
#import <CoreTelephony/CTCall.h>
...
@property (nonatomic,strong) CTCallCenter* callCenter;

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{  
   .... 
  self.callCenter = [[CTCallCenter alloc] init];
  [self handleCall];
   .... 
}

-(void)handleCall
{
    self.callCenter.callEventHandler = ^(CTCall *call){

       if ([call.callState isEqualToString: CTCallStateConnected])
       {
          //NSLog(@"call stopped");
       }
       else if ([call.callState isEqualToString: CTCallStateDialing])
       {
        }
       else if ([call.callState isEqualToString: CTCallStatedisconnected])
       {
          //NSLog(@"call played");
        }
       else if ([call.callState isEqualToString: CTCallStateIncoming])
       {
           //NSLog(@"call stopped");
       }
     };
  }

相关文章

我正在用TitaniumDeveloper编写一个应用程序,它允许我使用Ja...
我的问题是当我尝试从UIWebView中调用我的AngularJS应用程序...
我想获取在我的Mac上运行的所有前台应用程序的应用程序图标....
我是一名PHP开发人员,我使用MVC模式和面向对象的代码.我真的...
OSX中的SetTimer在Windows中是否有任何等效功能?我正在使用...
我不确定引擎盖下到底发生了什么,但这是我的设置,示例代码和...