无法使用 UIWebView 拨打电话

Posted

技术标签:

【中文标题】无法使用 UIWebView 拨打电话【英文标题】:Not able to make phone call using UIWebView 【发布时间】:2014-05-08 09:44:50 【问题描述】:

我想使用UIWebView 拨打电话。我尝试了下面的代码,如果我简单地放置一个按钮并在按钮上单击执行下面的代码,它就可以正常工作。但目前在单击按钮时,我调用了一个 api,并在响应时执行下面的代码。

// Make a call to given phone number
- (void)callPhoneNumber:(NSString *)phoneNumber

    if (!self.webView)
    
        webView = [[UIWebView alloc] init];
        [self.view addSubview:self.webView];
        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]];

它甚至没有调用 webview 委托方法。

可能是什么原因?

请注意,我只想使用 webview 调用,所以请不要建议使用原生联系人应用程序。使用 webview 可以在应用程序中保持流畅。通话结束时,用户仅在应用程序中。使用原生应用,如果用户想回到我的应用,用户必须手动打开应用。

【问题讨论】:

[NSURLRequest requestWithURL:url] 永远无法工作。 @Michael 为什么它永远无法工作? 看看我的回答。为什么要通过调用webview上的方法来拨打号码?它只是不能这样工作。 重复:***.com/questions/12065498/… @Michael 它确实可以在其他控制器中使用。 【参考方案1】:

要拨打电话号码,您必须拨打-[UIApplication openURL:]

NSString *phoneNumber = @"+5512345678";
NSURL *phoneNumberURL = [NSURL URLWithString:[NSString stringWithFormat:@"tel://%@", phoneNumber]];
[[UIApplication sharedApplication] openURL:phoneNumberURL];

【讨论】:

【参考方案2】:

为什么不用这个?

NSString *phoneNumberURL = [@"telprompt://" stringByAppendingString: phoneNumber];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneNumberURL]];

这会在通话结束后自动将用户带回应用程序。我希望这就是您想要使用 webview 实现的目标。

https://***.com/a/12065542/569497

【讨论】:

telprompt:// 也不起作用。但是tel:// 确实拨打了电话。但这不是我想要的,因为它不要求确认。【参考方案3】:

你确定self.webView 已经初始化了吗?

更改:webView = [[UIWebView alloc] init]; 收件人:self.webView = [[UIWebView alloc] init];

这个:[NSString stringWithFormat:@"tel:phoneNumber"] 不起作用;试试:[NSString stringWithFormat:@"tel:%@",phoneNumber]

然而,就我个人而言,我从未尝试过以这种方式拨打电话。

【讨论】:

【参考方案4】:

如果您想通过 UIWebView 调用,请使用以下示例:

+ (void)callWithString:(NSString *)phoneString

  [self callWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"tel:%@",phoneString]]];

+ (void)callWithURL:(NSURL *)url

  static UIWebView *webView = nil;
  static dispatch_once_t onceToken;
  dispatch_once(&onceToken, ^  
    webView = [UIWebView new];
  );
  [webView loadRequest:[NSURLRequest requestWithURL:url]];

【讨论】:

以上是关于无法使用 UIWebView 拨打电话的主要内容,如果未能解决你的问题,请参考以下文章

在没有 alertView 的情况下使用 UIWebView 在 iOS 中以编程方式拨打电话

iOS -- 拨打电话

拨打电话和清除缓存

iOS_拨打电话

iOS 两种调用拨打电话方式

H5 唤起拨打电话功能