我需要我的应用程序在有电话时发送通知(来电,已连接,通话已结束)
我通过通知注册了我的viewController.
我通过通知注册了我的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"); } }; }