OGeek|极客世界-中国程序员成长平台

标题: ios - 委托(delegate)知道由应用程序发起的电话何时结束 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 09:43
标题: ios - 委托(delegate)知道由应用程序发起的电话何时结束

我有一个使用以下代码调用电话的代码:

// Make a call to given phone number
- (void)callPhoneNumberNSString *)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 的委托(delegate)设置为当前 Controller 。但是没有调用任何委托(delegate)方法。

- (void)webViewDidStartLoadUIWebView *)webView
{
    DLog(@"Start Loading");
}

- (void)webViewDidFinishLoadUIWebView *)webView
{
    DLog(@"Finish Loading");
}

- (void)webViewUIWebView *)webView didFailLoadWithErrorNSError *)error
{
    DLog(@"Did fail with error : %@", error);
}

我不知道您是否需要此信息,但我使用 webview,以便在调用电话时,流程仍保留在应用程序内,并且在通话结束时,会显示应用程序屏幕,而不是用户从 native 联系人应用程序手动进入应用程序.



Best Answer-推荐答案


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

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

您必须在应用程序中定义一个处理程序 block 并将其分配给此属性。 如果您的应用程序在调用事件发生时处于事件状态,则系统会在调用状态更改时立即将该事件分派(dispatch)给您的处理程序。引用发现的苹果文档here.

关于ios - 委托(delegate)知道由应用程序发起的电话何时结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23491047/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4