在本地代码中调用不同于UIWebView的电话后,返回到应用行为

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

HTML链接:

<a href="tel:1-408-555-5555">1-408-555-5555</a> 

原生应用程序URLstring

 tel:1-408-555-5555 

但是,在完成从UIWebView中的HTML链接发起的电话呼叫后,我将redirect到我的应用程序。 但是,当完成从原生应用程序的URLstring的电话,我的iPhone停留在iPhone的普通电话应用程序,如果我想返回到我的应用程序,我必须手动这样做。

据我所知,其他人所说的话,没有办法改变这种行为。

这是我的问题:

  1. 在通过本地应用程序URLstring拨打电话之后,是否有可能返回到应用程序?
  2. 在完成一个电话之后,我真的希望用户redirect到我的应用程序的情况下,实现一个UIWebView而不是一个UILabel会有什么不利吗?
  1. 在调用-[UIApplication openURL:]tel: URL之间,行为并不相同,然后单击指向UIWebView同一个URL的链接。

  2. 使用UIWebView而不是UILabel可能有一些缺点,但是您不必实际显示UIWebView来获取其tel URL处理行为。 相反,只需在UIWebView的一个实例中加载一个tel 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 

最简单的方法似乎是:

 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"telprompt:0123456789"]]; 

你会得到一个提示,你的应用程序将在通话结束后重新获得焦点。

让我简化一下。 所有你需要的是这个小片段:

 UIWebView *callWebview = [[UIWebView alloc] init]; NSURL *telURL = [NSURL URLWithString:@"tel:number-to-call"]; [callWebview loadRequest:[NSURLRequest requestWithURL:telURL]]; 

我到了这里

*最近在iOS 5.0上成功testing。

Eric的Brotto方法仍然在5.1中工作。 您必须在加载请求之前将web视图添加到主视图中,如下所示:

 NSString *cleanedString = [[phoneNumber componentsSeparatedByCharactersInSet:[[NSCharacterSet characterSetWithCharactersInString:@"0123456789-+()"] invertedSet]] componentsJoinedByString:@""]; NSString *escapedPhoneNumber = [cleanedString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSURL *telURL = [NSURL URLWithString:[NSString stringWithFormat:@"tel://%@", escapedPhoneNumber]]; UIWebView *mCallWebview = [[UIWebView alloc] init] ; [self.view addSubview:mCallWebview]; [mCallWebview loadRequest:[NSURLRequest requestWithURL:telURL]]; 

(我添加了一个电话号码清理,删除任何阻止此方法的非数字字符)