use*_*353 12 iphone cocoa ios core-telephony
我需要我的应用程序在有呼叫时发送通知(来电,已连接,呼叫结束)我已通过通知注册了我的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];
Run Code Online (Sandbox Code Playgroud)
我还提出了一种检查呼叫状态的方法
-(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");
}
};
}
Run Code Online (Sandbox Code Playgroud)
但这一切都不起作用.请帮我.
哪里出错了?是否有任何代码告诉如何使用核心电话?
Yog*_*dra 22
用这个
Appdelegate.h
#import <CoreTelephony/CTCallCenter.h>
#import <CoreTelephony/CTCall.h>
...
@property (nonatomic, strong) CTCallCenter* callCenter;
Run Code Online (Sandbox Code Playgroud)
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");
}
};
}
Run Code Online (Sandbox Code Playgroud)
In Swift 3
Run Code Online (Sandbox Code Playgroud)
使用CXCallObserver
import CallKit
var callObserver = CXCallObserver()
class AppDelegate: UIResponder, UIApplicationDelegate, CXCallObserverDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
callObserver.setDelegate(self, queue: nil) //Set delegate to self to call delegate method.
return true
}
func callObserver(_ callObserver: CXCallObserver, callChanged call: CXCall) {
if call.hasConnected {
Print("Call Connect -> \(call.uuid)")
}
if call.isOutgoing {
Print("Call outGoing \(call.uuid)")
}
if call.hasEnded {
Print("Call hasEnded \(call.uuid)")
}
if call.isOnHold {
Print("Call onHold \(call.uuid)")
}
}
}
Run Code Online (Sandbox Code Playgroud)