代表知道应用程序启动的电话结束的时间

我有一个代码,使用以下代码拨打电话:

// Make a call to given phone number - (void)callPhoneNumber:(NSString *)phoneNumber { if (!self.webview) self.webview = [[UIWebView alloc] init]; self.webview.delegate = self; // Remove non-digits from phone number phoneNumber = [[phoneNumber componentsSeparatedByCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""]; // Make a call NSURL * url = [NSURL URLWithString:[NSString stringWithFormat:@"tel:%@", phoneNumber]]; [self.webview loadRequest:[NSURLRequest requestWithURL:url]]; [self.view addSubview:self.webview]; } 

这是一个电话。 我想要的是, 我想知道用户何时结束通话 。 我必须在用户结束通话时执行操作。 有什么办法吗?

我尝试的是,我将webview委托设置为当前控制器。 但是没有调用任何委托方法。

 - (void)webViewDidStartLoad:(UIWebView *)webView { DLog(@"Start Loading"); } - (void)webViewDidFinishLoad:(UIWebView *)webView { DLog(@"Finish Loading"); } - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { DLog(@"Did fail with error : %@", error); } 

我不知道你是否需要这些信息,但我使用webview,以便在拨打电话时,流程仍在应用程序内,在通话结束时,显示应用程序屏幕,而不是用户手动从本机联系人应用程序进入应用程序。

CoreTelephony框架具有带callEventHandler属性的CTCallCenter类。

 @property (nonatomic, copy) void (^callEventHandler)(CTCall*); 

您必须在应用程序中定义处理程序块并将其分配给此属性。 如果您的应用程序在发生调用事件时处于活动状态,则系统会在调用状态更改时立即将事件调度到处理程序。 请参阅此处找到的Apple文档。

我使用下面的代码来获取通话事件的通知。

 // Create CTCallCenter object callCenter = [[CTCallCenter alloc] init]; // Assign event handler. This will be called on each call event self.callCenter.callEventHandler = ^(CTCall* call) { // If call ended if (call.callState == CTCallStateDisconnected) { NSLog(@"Call ended."); } }; 

对于其他呼叫状态,请查看呼叫状态。 有关CTCallCenter更多信息, CTCallCenter查看CTCallCenter的Apple文档 。

您应该实现UIWebView的这个委托方法

 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; 

在结束通话操作中,您的webview将通知此委托方法有关您的操作执行情况,您可以在那里处理它

 -(BOOL) webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { if (navigationType == UIWebViewNavigationTypeLinkClicked ) { NSURL *url = [request URL]; NSLog(@"URL ===== %@",url); // you can check your end call operation URL and handle it accordingly if ([[url absoluteString] rangeOfString:@"#"].location == NSNotFound) { [[UIApplication sharedApplication] openURL:[request URL]]; return NO; } //return NO; } return YES; }