#import #import "CallListner.h" static CallListner* _CallListner; @implementation CallListner +(CallListner*) instance { if (_CallListner != nil) { return _CallListner; } else { _CallListner =(CallListner*)([[CallListner alloc] init]); } return _CallListner; } - (id)init:(NSString *)listner { _unityListner = listner; [self initCallCenter]; return self; } - (void)initCallCenter { bool *isComingCall = false; _callCenter = [[CTCallCenter alloc] init]; _callCenter.callEventHandler = ^(CTCall* call) { dispatch_async(dispatch_get_main_queue(), ^{ if ([call.callState isEqualToString:CTCallStateDisconnected]) { // NSLog("CTCallCenter:Call has been disconnected"); NSLog(@"电话挂断"); if(isComingCall) { [self sendUnityMessage:@"onEndincomeCall", ""] } else { [self sendUnityMessage:@"onEndOutGoingCall", ""] } } else if ([call.callState isEqualToString:CTCallStateConnected]) { // NSLog("CTCallCenter:Callhasjustbeen connected"); NSLog(@"电话接通"); if(isComingCall) { [self sendUnityMessage:@"onConectedComingCall", ""] } else { [self sendUnityMessage:@"onConectedOutGoingCall", ""] } } else if ([call.callState isEqualToString:CTCallStateIncoming]) { // NSLog("CTCallCenter:Call is incoming"); NSLog(@"电话被叫"); isComingCall = true; } else if ([call.callState isEqualToString:CTCallStateDialing]) { // NSLog("CTCallCenter:Call is Dialing"); NSLog(@"电话主动拨打电话"); isComingCall = false; } else { // NSLog("CTCallCenter:Nothing is done"); NSLog(@"电话其他状态"); } }); }; } -(void) sendUnityMessage:(const NSString*)method with:(NSString*)msg { if(_unityListner != nil && msg != nil) { UnitySendMessage([_unityListner UTF8String], [method UTF8String], [msg UTF8String]); } } @end #if __cplusplus extern "C" { #endif void _init(const char* goName); #if __cplusplus } #endif void _init(const char* goName) { [[CallListner instance] init:[NSString stringWithUTF8String:goName]]; }