iOS 拨打电话(解决openURL延迟和不同方法比较)

摘要:
%@“:NSMutabbleString*str2=[[NSMutabableStringalloc]initWithFormat;@”186xxxx6979“]:NSMutagbleString*str3=[[NSMugabbleStringalloc]initWithFormat,@”186xxxx6979”]:str]options:nil]:此方法需要确定版本:@”tel。

转载请注明出处!!!

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的案例。

总结:推荐第二种,都是在第一种延迟取消后,还是可以用第一种的

免责声明:文章转载自《iOS 拨打电话(解决openURL延迟和不同方法比较)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Hibernate 缓存机制FreeRTOS学习及移植笔记之二:在IAR和STM32F103VET上移植FreeRTOS下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WSDL2Java操作指南

  1. 安装JDK1.5, 配置系统环境变量:    下载安装JDK后, 设置环境变量:    JAVA_HOME=C:\Program Files\Java\jdk1.5.0_02    Path=%Path%;%JAVA_HOME%\bin(这里的%Path%指你系统已经有的一系列配置)    CLASSPATH=%JAVA_HOME%\lib 2...

IDEA中设置注释模板的方法

  IDEA中设置注释模板主要分为两个部分,分别是创建java文件时类的注释和方法的注释。   这里为大家详细介绍一下方法,按MyEclipse的风格设置(MyEclipse的请看:MyEclipse中设置注释模板的方法),大家可以根据自己的习惯生成自己喜欢的注释模板。效果如下:   一、设置类的注释模板 1、选择File→Settings→Editor→...

JS日历插件

一、简介 1. 注意事项 (1)My97DatePicker目录是一个整体,不可破坏里面的目录结构,也不可对里面的文件改名,可以改目录名; (2)各目录及文件的用途:         WdatePicker.js 配置文件,在调用的地方仅需使用该文件,可多个共存,以xx_WdatePicker.js方式命名         config.js 语言和皮肤配...

ES开启慢查询日志

默认情况,慢日志是不开启的。要开启它,需要定义具体动作(query,fetch 还是 index),你期望的事件记录等级( WARN、INFO、DEBUG、TRACE 等),以及时间阈值。 es有几种搜索模式,比如 query_then_fetch , 表示先从各个节点query到id,然后整合,再去各个节点拿具体数据 这是一个索引级别的设置,也就是说可以...

jQuery.ajax() datatype:“json" 转换失败

当使用jQuery.ajax() 时,如果设置dataType:"json",如果返回的字符转换出错则不会调用success方法,而进入error方法,控制台中也不会出现错误信息 如果没有定义error方法,则$.ajax()会默默的结束。 为了避免这种现象出现:   1.写$.ajax()时定义error方法,对错误进行处理。   2.服务器端生成jso...

前端json数据格式化显示

1、格式化处理 1 var obj = "...";//json格式的字符串 2 var jsonPretty = JSON.stringify(JSON.parse(obj),null,2); 2、显示 只需把格式化处理后的json字符串数据放到 pre标签 中即可。 3、demo js代码(直接是对象,所以省略JSON.parse操作) 1 let...