#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 { _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" with:@""]; } else { [self sendUnityMessage:@"onEndOutGoingCall" with:@""]; } } else if ([call.callState isEqualToString:CTCallStateConnected]) { // NSLog("CTCallCenter:Callhasjustbeen connected"); NSLog(@"电话接通"); if(_isComingCall) { [self sendUnityMessage:@"onConectedComingCall" with:@""]; } else { [self sendUnityMessage:@"onConectedOutGoingCall" with:@""]; } } 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 _initCallListner(const char* goName); #if __cplusplus } #endif void _initCallListner(const char* goName) { [[CallListner instance] init:[NSString stringWithUTF8String:goName]]; }