iOS 直接拨打号码

直接代码:

// ACETelPrompt.h

#import <Foundation/Foundation.h>

@interface ACETelPrompt :
NSObject

typedef
void (^ACETelCallBlock)(NSTimeInterval duration);

typedef
void (^ACETelCancelBlock)(void);

+ (BOOL)callPhoneNumber:(NSString *)phoneNumber

call:(ACETelCallBlock)callBlock

cancel:(ACETelCancelBlock)cancelBlock;

@end

// ACETelPrompt.m

#import "ACETelPrompt.h"

#import "AppDelegate.h"

// the time required to launch the phone app and come back (will be substracted to the duration)

#define kCallSetupTime      3.0

@interface
ACETelPrompt ()

@property (nonatomic,
strong) NSDate *callStartTime;

@property (nonatomic,
copy) ACETelCallBlock callBlock;

@property (nonatomic,
copy) ACETelCancelBlock cancelBlock;

@end

@implementation ACETelPrompt

+ (instancetype)sharedInstance

{

static ACETelPrompt *_instance =
nil;

static dispatch_once_t oncePredicate;

dispatch_once(&oncePredicate, ^{

_instance = [[self
alloc] init];

});

return _instance;

}

+ (BOOL)callPhoneNumber:(NSString *)phoneNumber

call:(ACETelCallBlock)callBlock

cancel:(ACETelCancelBlock)cancelBlock

{

if ([self
validPhone:phoneNumber]) {

ACETelPrompt *telPrompt = [ACETelPrompt
sharedInstance];

// observe the app notifications

[telPrompt
setNotifications];

// set the blocks

telPrompt.callBlock = callBlock;

telPrompt.cancelBlock = cancelBlock;

// clean the phone number

NSString *simplePhoneNumber =

[[phoneNumber componentsSeparatedByCharactersInSet:

[[NSCharacterSet
decimalDigitCharacterSet] invertedSet]]
componentsJoinedByString:@""];

// call the phone number using the telprompt scheme

NSString *stringURL = [@"telprompt://"
stringByAppendingString:simplePhoneNumber];

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

return YES;

}

return
NO;

}

+ (BOOL)validPhone:(NSString*) phoneString

{

NSTextCheckingType type = [[NSTextCheckingResult
phoneNumberCheckingResultWithRange:NSMakeRange(0, phoneString.length)

phoneNumber:phoneString]
resultType];

return type ==
NSTextCheckingTypePhoneNumber;

}

#pragma mark - Notifications

- (void)setNotifications

{

[[NSNotificationCenter
defaultCenter] addObserver:self

selector:@selector(applicationDidEnterBackground:)

name:UIApplicationDidEnterBackgroundNotification

object:nil];

[[NSNotificationCenter
defaultCenter] addObserver:self

selector:@selector(applicationDidBecomeActive:)

name:UIApplicationDidBecomeActiveNotification

object:nil];

}

#pragma mark - Events

- (void)applicationDidEnterBackground:(NSNotification *)notification

{

// save the time of the call

self.callStartTime = [NSDate
date];

}

- (void)applicationDidBecomeActive:(NSNotification *)notification

{

// now it‘s time to remove the observers

[[NSNotificationCenter
defaultCenter] removeObserver:self];

if (self.callStartTime !=
nil) {

// I‘m coming back after a call

if (self.callBlock !=
nil) {

self.callBlock(-([self.callStartTime
timeIntervalSinceNow]) -
kCallSetupTime);

}

// reset the start timer

self.callStartTime =
nil;

}
else if (self.cancelBlock !=
nil) {

// user didn‘t start the call

self.cancelBlock();

}

}

调用

- (IBAction)connectUs:(id)sender {

[ACETelPrompt
callPhoneNumber:@"020-38880808080"

call:^(NSTimeInterval duration) {

NSLog(@"User made a call of %.1f seconds", duration);

}
cancel:^{

NSLog(@"User cancelled the call");

}];

}

@end

时间: 2024-10-06 00:16:10

iOS 直接拨打号码的相关文章

ios中拨打电话的实现

// 定义点击拨号按钮时的操作 - (void)callAction{ NSString *number = @"";// 此处读入电话号码 // NSString *num = [[NSString alloc]initWithFormat:@"tel://%@",number]; //number为号码字符串 如果使用这个方法结束电话之后会进入联系人列表 NSString *num = [[NSString alloc]initWithFormat:@"

iOS开发- 拨打电话总结

关于iOS应用拨打电话, 我所知道的有3种办法, 具体如下: 一.利用openURL(tel) 特点: 直接拨打, 不弹出提示. 并且, 拨打完以后, 留在通讯录中, 不返回到原来的应用. //拨打电话 - (void)callPhone:(NSString *)phoneNumber { //phoneNumber = "18369......" NSMutableString * str=[[NSMutableString alloc] initWithFormat:@"

iOS应用拨打电话

方法一: 特点: 直接拨打, 不弹出提示. 并且, 拨打完以后, 留在通讯录中, 不返回到原来的应用. //拨打电话 - (void)callPhone:(NSString *)phoneNumber { //phoneNumber = "18369......" NSMutableString * str=[[NSMutableString alloc] initWithFormat:@"tel:%@",phoneNumber]; [[UIApplication

ios严格检验身份证号码有效性

+ (BOOL)checkIDCard:(NSString *)sPaperId { //判断位数 if (sPaperId.length != 15 && sPaperId.length != 18) { return NO; } NSString *carid = sPaperId; long lSumQT = 0 ; //加权因子 int R[] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; //校验码 unsigned char sChecker

IOS 根据身份证号码获取 年龄 生日 性别

/** 从身份证上获取年龄 18位身份证 */ -(NSString *)getIdentityCardAge:(NSString *)numberStr { NSDateFormatter *formatterTow = [[NSDateFormatter alloc]init]; [formatterTow setDateFormat:@"yyyy-MM-dd"]; NSDate *bsyDate = [formatterTow dateFromString:[self birth

iOS 拨打电话三种方法

小弟查了很多地方的关于iOS程序拨打电话,大都不全,今天我总结了三种方法,各有不同,拿来给大家分享,希望给大家有所帮助1,这种方法,拨打完电话回不到原来的应用,会停留在通讯录里,而且是直接拨打,不弹出提示NSMutableString str=[[NSMutableString alloc] initWithFormat:@"tel:%@",@"186xxxx6979"];// NSLog(@"str======%@",str);[[UIAppl

iOS拨打电话(三种方法)

iOS拨打电话(三种方法) 查了很多地方的关于iOS程序拨打电话,大都不全,今天我总结了三种方法,各有不同,拿来给大家分享,希望给大家有所帮助 1,这种方法,拨打完电话回不到原来的应用,会停留在通讯录里,而且是直接拨打,不弹出提示NSMutableString * str=[[NSMutableString alloc] initWithFormat:@"tel:%@",@"186xxxx6979"];    //            NSLog(@"s

Xamarin.iOS学习一:Hello.iOS 入门学习

介绍使用Xamarin开发iOS 在这两个章节里面,我们会使用Xamarin Studio 或者Visual Studio 创建第一个Xamarin.iOS程序并且去理解使用Xamarin开发iOS程序的基础概念.接着我们将会介绍创建和部署iOS程序所需要的工具.概念和步骤. Hello.iOS 快速入门 首先我们将创建一个让用户输入字母和数字并且可以拨打号码的应用程序,最终效果图如下:

html5 跳到拨打电话功能

在做一个微信的微网站中的一个便民服务电话功能的应用,用到移动web页面中列出的电话号码,点击需要实现调用通讯录,网页一键拨号的拨打电话功能. 如果需要在移动浏览器中实现拨打电话,发送email,美国服务器,调用sns等功能,移动手机WEB页面(HTML5)Javascript提供的接口是一个好办法. 采用url链接的方式,实现在Safari ios,香港服务器,Android 浏览器,webos 浏览器,塞班浏览器,IE,Operamini等主流浏览器,进行拨打电话功能. 1.最常用WEB页面J