与UIWebView相比,本机代码中的电话呼叫不同后返回应用行为

Phi*_*ton 27 iphone objective-c uiwebview

根据Apple的文档,为了从我的应用程序拨打电话,我需要实现以下协议:

HTML链接:

<a href="tel:1-408-555-5555">1-408-555-5555</a>
Run Code Online (Sandbox Code Playgroud)

原生应用URL字符串:

tel:1-408-555-5555
Run Code Online (Sandbox Code Playgroud)

但是,在完成从UIWebView内的HTML链接发起的电话呼叫后,我将重定向到我的应用程序.但是在完成从本机应用程序URL字符串进行的电话呼叫后,我的iphone会保留在iphone的常规电话应用程序中,如果我想返回我的应用程序,我必须手动执行此操作.

据我所知,通过阅读其他人所说的话,没有办法改变这种行为.

这是我的问题:

  1. 从本机应用程序URL字符串拨打电话后,是否无法返回应用程序?
  2. 在我真的希望在完成电话呼叫后将用户重定向回我的应用程序的情况下,实现UIWebView而不是UILabel会有任何不利之处吗?

Ric*_*son 17

最简单的方法似乎是:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"telprompt:0123456789"]];
Run Code Online (Sandbox Code Playgroud)

您将收到提示,您的应用将在通话结束后重新获得焦点.


lem*_*nar 16

  1. -[UIApplication openURL:]使用tel:URL 调用和单击指向同一URL的链接之间的行为确实不同UIWebView.

  2. 使用UIWebView而不是UILabel可能有一些缺点,但您不必实际显示UIWebView以获取其telURL处理行为.相反,只需tel在UIWebView的实例中加载URL请求,而不将其添加到视图层次结构中.

例如:

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface PhoneCaller : NSObject
{
  @private
    UIWebView *webview;
}
- (void)callTelURL:(NSURL *)url;
@end

@implementation
- (id)init
{
    self = [super init];
    if (self)
    {
        webview = [[UIWebView alloc] init];
    }
    return self;
}
- (void)callTelURL:(NSURL *)url
{
    [webview loadRequest:[NSURLRequest requestWithURL:url]];
}
- (void)dealloc
{
    [webview release];
    [super dealloc];
}
@end
Run Code Online (Sandbox Code Playgroud)


Eri*_*tto 10

请允许我简化一下.所有你需要的是这个小片段:

UIWebView *callWebview = [[UIWebView alloc] init];
NSURL *telURL = [NSURL URLWithString:@"tel:number-to-call"];
[callWebview loadRequest:[NSURLRequest requestWithURL:telURL]];
Run Code Online (Sandbox Code Playgroud)

这我在这里.

*最近在iOS 5.0上成功测试过.