iOS 撥打電話(解決openURL延遲和不同方法比較)

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é):推薦第二種,都是在第一種延遲取消后,還是可以用第一種的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容