免费开源的iOS开发学习平台

系统应用调用:1-拨打电话功能

在很多的App中都可以直接拨打指定的电话号码,比如在一些订餐类App上我们可以直接电话联系商家。本节我们通过一个简单的案例讲解如何实现调用系统的电话拨打应用。

准备工作

为了实现拨打电话的功能,我们搭建一个简单的界面,添加一个UITextField控件用于输入电话号码,以及一个UIButton控件,点击后拨打输入的电话号码。两个控件添加完毕后,建立与与ViewController的连线。

实现方式一:使用openURL:options:completionHandler:方法

在UIApplication类中,提供了openURL:options:completionHandler:方法用于打开特定的URL链接,此时我们需要提供一个遵守tel协议的链接,链接的格式为:tel://电话号码。通过调用openURL:options:completionHandler:方法,即可跳转到通话界面。

- (IBAction)callUp:(id)sender {
    NSString * phoneNum = [NSString stringWithFormat:@"tel://%@", self.textField.text];
    NSURL *url = [NSURL URLWithString:phoneNum];
    UIApplication *app = [UIApplication sharedApplication];
    if ([app canOpenURL:url]) {
           [app openURL:url options:@{} completionHandler:nil];
        }
}

(这里将格式字符串“tel” 改为“telprompt”,电话拨打出去前会弹出询问框)

实现方式二:使用WKWebView

通过WKWebView实现拨打电话功能,拨打前会弹出窗口,询问用户是否拨打电话,用户结束通话后自动返回到应用。

  • 点击方法中创建WKWebView对象,并进行设置。
- (IBAction)callUp:(id)sender {
    NSString *phoneNum = [NSString stringWithFormat:@"telprompt://%@", self.textField.text];
    WKWebView *webView = [[WKWebView alloc] init];
    webView.navigationDelegate = self;
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:phoneNum]]];
    [self.view addSubview:webView];
}
  • 通过调用WKNavigationDelegate中的代理方法实现界面的跳转
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
    NSURL *url = navigationAction.request.URL;
    UIApplication *app = [UIApplication sharedApplication];
    if ([url.absoluteString hasPrefix:@"tel"]) {
        if ([app canOpenURL:url]) {
           [app openURL:url options:@{} completionHandler:nil];
        }
    }
    decisionHandler(WKNavigationActionPolicyAllow);
}

实现方式三:使用UIWebView

通过UIWebView同样可以实现拨打电话功能。使用UIWebView实现拨打电话功能时,系统会弹出窗口询问用户是否拨打电话,用户结束通话后自动返回到应用。

- (IBAction)callUp:(id)sender {
    NSString *phoneNum = [NSString stringWithFormat:@"tel://%@",self.textField.text];
    UIWebView *webView = [[UIWebView alloc]init];
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:phoneNum]]];
    [self.view addSubview:wedView];
}

示例代码

https://github.com/99ios/17.6.1