iOS撥打電話有三種方法。
第一種:
NSMutableString *str=[[NSMutableString alloc] initWithFormat:@"tel:%@",@"186xxxx6979"];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]];
第二種:
NSMutableString *str2=[[NSMutableString alloc] initWithFormat:@"tel:%@",@"186xxxx6979"];
UIWebView* callWebview =[[UIWebView alloc] init];
[callWebview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:str2]]];
[self.view addSubview:callWebview];
第三種:
NSMutableString *str3=[[NSMutableString alloc] initWithFormat:@"telprompt://%@",@"186xxxx6979"];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:str3]];
三種方法優(yōu)缺點:
網(wǎng)上有解釋為第一種打完電話留在打電話界面,第二種打完電話回到原來的app
真實測試:兩種打完電話都是回到原來的app界面,
方法一:在iOS10.2之前沒問題,沒有提示直接撥打,但是在iOS10.2后新增彈出提示,彈出提示有延遲。修改方法有幾種
1. 調(diào)用[[UIApplication sharedApplication] openURL:[NSURL URLWithString:str] options:@{} completionHandler:nil];這個方法但是需要判斷版本,在iOS10之后才用。10之前用原來的?[[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]];
2.關(guān)于撥打電話的方法,自己憑喜好選擇,導致彈出框延遲的原因,目前初步診斷就是openURL在iOS 10及其之后會阻塞主線程
NSMutableString * str=[[NSMutableString alloc] initWithFormat:@"tel:%@",@"18511089439"];
dispatch_async(dispatch_get_global_queue(0,0), ^{
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]];
});
方法二:點擊有提示。但是照此方法寫的會不停創(chuàng)建webview。應當聲明一個web,每次都調(diào)用同一個以節(jié)省資源
方法三:點擊有提示。用這個的時候要小心,因為apple的文檔里邊沒出現(xiàn)過telprompt這個。之前是有過被reject的案例。
總結(jié):推薦第二種,都是在第一種延遲取消后,還是可以用第一種的