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


轉載請注明出處!!!

iOS撥打電話有三種方法。

 

注意:最新的iOS12上測試 三種方法效果沒有區別 也不要開線程

 

 

第一種:

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]];

三種方法優缺點:

網上有解釋為第一種打完電話留在打電話界面,第二種打完電話回到原來的app

真實測試:兩種打完電話都是回到原來的app界面,

方法一:在iOS10.2之前沒問題,沒有提示直接撥打,但是在iOS10.2后新增彈出提示,彈出提示有延遲。修改方法有幾種

1. 調用[[UIApplication sharedApplication] openURL:[NSURL URLWithString:str] options:@{} completionHandler:nil];這個方法但是需要判斷版本,在iOS10之后才用。10之前用原來的 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]];

2.關於撥打電話的方法,自己憑喜好選擇,導致彈出框延遲的原因,目前初步診斷就是openURL在iOS 10及其之后會阻塞主線程

NSMutableString * str=[[NSMutableString alloc] initWithFormat:@"tel:%@",@"18511089439"];

    dispatch_async(dispatch_get_global_queue(0, 0), ^{

        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]];

    });

 

方法二:點擊有提示。但是照此方法寫的會不停創建webview。應當聲明一個web,每次都調用同一個以節省資源 

方法三:點擊有提示。用這個的時候要小心,因為apple的文檔里邊沒出現過telprompt這個。之前是有過被reject的案例。

 

總結:推薦第二種,都是在第一種延遲取消后,還是可以用第一種的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM