我读过其他几篇帖子,比如这篇: iOS:无法在 CallKit 中获取拨出呼叫事件。 解决方案始终是确保对 CXCallObserver 对象的引用是强大的,以便它不会在需要之前消失。 我相信我已经做到了,但仍然有问题。 我正在使用Objective-C,SDK 11.3;代码构建良好,没有错误或崩溃发生。 callChanged 方法永远不会触发。 有什么想法吗?
这是我的代码:
CXCallObserverDelegate.h:(不知道为什么我需要自己创建这个,但是没有它,我的代码将无法构建。 但是,当我这样做时,我会收到一条警告,指出"重复定义被忽略"。 这似乎不是问题,但可能是吗?
#import <CallKit/CXCallObserver.h>
#import <CallKit/CXCall.h>
@protocol CXCallObserverDelegate
- (void)callObserver:(CXCallObserver *)callObserver
callChanged:(CXCall *)call;
@end
MyViewController.h:
#import "CXCallObserverDelegate.h"
@interface MyViewController: MixpanelTrack <OtherDelegate,AnotherDelegate,CXCallObserverDelegate>
{ ... }
MyViewController.m:
#import <CallKit/CXCallObserver.h>
#import <CallKit/CXCall.h>
@property (atomic, strong) CXCallObserver *callObserver;
-(void)viewDidLoad {
[super viewDidLoad];
[self launchCallObserver];
}
-(void) launchCallObserver {
CXCallObserver *callObserver = [[CXCallObserver alloc] init];
[callObserver setDelegate:self queue:nil];
self.callObserver = callObserver;
}
-(void)callObserver:(CXCallObserver *)callObserver callChanged:(CXCall *)call {
if (call.hasConnected) {
[TSMessage showNotificationWithTitle:@“I never see this“ type:TSMessageNotificationTypeSuccess];
} else if (call.hasEnded) {
[TSMessage showNotificationWithTitle:@“I never see this either“ type:TSMessageNotificationTypeSuccess];
}
}
我正在通过我的应用程序以编程方式拨打电话:
[[UIApplication sharedApplication] openURL:phoneUrl];
我检查了我们的项目,看到了您的问题:您使用的是导入类而不是 Callkit 框架,因此当您从不导入此协议时,您将覆盖CXCallObserverDelegate
。
要解决此问题,您需要具有以下功能的导入框架:
#import <CallKit/CallKit.h>
相反
#import <CallKit/CXCallObserver.h>
#import <CallKit/CXCall.h>
我希望这对你有帮助