在本地代码中调用不同于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的普通电话应用程序,如果我想返回到我的应用程序,我必须手动这样做。
据我所知,其他人所说的话,没有办法改变这种行为。
这是我的问题:
- 在通过本地应用程序URLstring拨打电话之后,是否有可能返回到应用程序?
- 在完成一个电话之后,我真的希望用户redirect到我的应用程序的情况下,实现一个UIWebView而不是一个UILabel会有什么不利吗?
-
在调用
-[UIApplication openURL:]
和tel:
URL之间,行为并不相同,然后单击指向UIWebView
同一个URL的链接。 -
使用
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]];
(我添加了一个电话号码清理,删除任何阻止此方法的非数字字符)