1、调用电话

1.1 拨打系统电话

  • 调用系统自带的打电话程序,要跳转到打电话程序,打完电话自动跳转回来。

  • 在 iOS9.0 + 系统隐私控制里禁止查询设备中已安装的 App,所以在 iOS9.0 + 系统中要实现应用间跳转还需要配置协议白名单。在发起跳转的 App 的 Info.plist 文件中增加一个 LSApplicationQueriesSchemes 字段,把它设置为数组类型,并配置需要跳转的协议名单。

  • URL 地址:tel://电话号码

  • iOS 系统版本 < 10.0

    	NSURL *url = [NSURL URLWithString:@"tel://10086"];
    
    	if ([[UIApplication sharedApplication] canOpenURL:url]) {
    
    		[[UIApplication sharedApplication] openURL:url];
    
    	} else {
    NSLog(@"没有安装应用");
    }
  • iOS 系统版本 >= 10.0

    	NSURL *url = [NSURL URLWithString:@"tel://10086"];
    
    	if ([[UIApplication sharedApplication] canOpenURL:url]) {
    
    		[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
    
    	} else {
    NSLog(@"没有安装应用");
    }

1.2 拨打电话

  • 在应用内部打电话,不需要跳出程序,完全在自己的程序中,打完电话自动跳转回来。

    	UIWebView *callWebView = [[UIWebView alloc] init];
    
    	NSURL *url = [NSURL URLWithString:@"tel:10086"];
    [callWebView loadRequest:[NSURLRequest requestWithURL:url]]; [self.view addSubview:callWebView];

2、调用短信

2.1 调用系统短信

  • 调用系统自带的信息程序,要跳转到信息程序,发完短信后不会跳转回来。

  • 在 iOS9.0 + 系统隐私控制里禁止查询设备中已安装的 App,所以在 iOS9.0 + 系统中要实现应用间跳转还需要配置协议白名单。在发起跳转的 App 的 Info.plist 文件中增加一个 LSApplicationQueriesSchemes 字段,把它设置为数组类型,并配置需要跳转的协议名单。

  • URL 地址:sms://电话号码

  • iOS 系统版本 < 10.0

    	NSURL *url = [NSURL URLWithString:@"sms://10086"];
    
    	if ([[UIApplication sharedApplication] canOpenURL:url]) {
    
    		[[UIApplication sharedApplication] openURL:url];
    
    	} else {
    NSLog(@"没有安装应用");
    }
  • iOS 系统版本 >= 10.0

    	NSURL *url = [NSURL URLWithString:@"sms://10086"];
    
    	if ([[UIApplication sharedApplication] canOpenURL:url]) {
    
    		[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
    
    	} else {
    NSLog(@"没有安装应用");
    }

2.2 带内容发送短信

  • 在应用内部发送短信,不需要跳出程序,完全在自己的程序中,发送短信后自动跳转回来。可以在程序中设置发送的短信内容。

  • 添加 MessageUI.framework 框架。

  • 在发起发送短信的视图控制器中

    	// 引入头文件
    #import <MessageUI/MessageUI.h> // 遵守协议
    <MFMessageComposeViewControllerDelegate>
  • 发送短信

    	if ([MFMessageComposeViewController canSendText]) {
    
    		MFMessageComposeViewController *messageVC = [[MFMessageComposeViewController alloc] init];
    messageVC.messageComposeDelegate = self; // 设置电话号码
    messageVC.recipients = @[@"10086"]; // 设置短信内容
    messageVC.body = @"话费余额"; // 调用系统发送短信界面
    [self presentViewController:messageVC animated:YES completion:nil];
    }
  • 处理发送响应结果

    	// MFMessageComposeViewControllerDelegate 协议方法
    - (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result { [self dismissViewControllerAnimated:YES completion:nil]; if (result == MessageComposeResultCancelled) { NSLog(@"Message cancelled"); } else if (result == MessageComposeResultSent) { NSLog(@"Message sent"); } else { NSLog(@"Message failed");
    }
    }

3、调用邮件

3.1 发送系统邮件

  • 调用系统自带的邮件程序,要跳转到邮件程序,发完邮件后不会跳转回来。

  • 在 iOS9.0 + 系统隐私控制里禁止查询设备中已安装的 App,所以在 iOS9.0 + 系统中要实现应用间跳转还需要配置协议白名单。在发起跳转的 App 的 Info.plist 文件中增加一个 LSApplicationQueriesSchemes 字段,把它设置为数组类型,并配置需要跳转的协议名单。

  • URL 地址:mailto://邮件地址

  • iOS 系统版本 < 10.0

    	NSURL *url = [NSURL URLWithString:@"mailto://qq0228@163.com"];
    
    	if ([[UIApplication sharedApplication] canOpenURL:url]) {
    
    		[[UIApplication sharedApplication] openURL:url];
    
    	} else {
    NSLog(@"没有安装应用");
    }
  • iOS 系统版本 >= 10.0

    	NSURL *url = [NSURL URLWithString:@"mailto://qq0228@163.com"];
    
    	if ([[UIApplication sharedApplication] canOpenURL:url]) {
    
    		[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
    
    	} else {
    NSLog(@"没有安装应用");
    }

3.2 带内容发送邮件

  • 在应用内部发送邮件,不需要跳出程序,完全在自己的程序中,发送邮件后自动跳转回来。可以在程序中设置发送的邮件内容。

  • 添加 MessageUI.framework 框架。

  • 在发起发送邮件的视图控制器中

    	// 引入头文件
    #import <MessageUI/MessageUI.h> // 遵守协议
    <MFMailComposeViewControllerDelegate>
  • 发送邮件

    	if ([MFMailComposeViewController canSendMail]) {
    
    		MFMailComposeViewController *mailVC = [[MFMailComposeViewController alloc] init];
    mailVC.mailComposeDelegate = self; // 设置邮箱
    [mailVC setToRecipients:@[@"qq0228@163.com"]]; // 设置邮件主题
    [mailVC setSubject:@"Hello"]; // 设置邮件内容
    [mailVC setMessageBody:@"Lorem ipsum dolor sit amet" isHTML:NO]; // 调用系统发送邮件界面
    [self presentViewController:mailVC animated:YES completion:nil];
    }
  • 处理发送响应结果

    	// MFMailComposeViewControllerDelegate 协议方法
    - (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error { [self dismissViewControllerAnimated:YES completion:nil]; if (result == MFMailComposeResultCancelled) { NSLog(@"Message cancelled"); } else if (result == MFMailComposeResultSent) { NSLog(@"Message sent"); } else if (result == MFMailComposeResultSaved) { NSLog(@"Message saved"); } else { NSLog(@"Message failed");
    }
    }

4、调用地图

4.1 调用系统地图

  • 在 iOS9.0 + 系统隐私控制里禁止查询设备中已安装的 App,所以在 iOS9.0 + 系统中要实现应用间跳转还需要配置协议白名单。在发起跳转的 App 的 Info.plist 文件中增加一个 LSApplicationQueriesSchemes 字段,把它设置为数组类型,并配置需要跳转的协议名单。

  • URL 地址:maps://

  • iOS 系统版本 < 10.0

    	NSURL *url = [NSURL URLWithString:@"maps://"];
    
    	if ([[UIApplication sharedApplication] canOpenURL:url]) {
    
    		[[UIApplication sharedApplication] openURL:url];
    
    	} else {
    NSLog(@"没有安装应用");
    }
  • iOS 系统版本 >= 10.0

    	NSURL *url = [NSURL URLWithString:@"maps://"];
    
    	if ([[UIApplication sharedApplication] canOpenURL:url]) {
    
    		[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
    
    	} else {
    NSLog(@"没有安装应用");
    }

5、调用浏览器

51 调用系统浏览器

  • 在 iOS9.0 + 系统隐私控制里禁止查询设备中已安装的 App,所以在 iOS9.0 + 系统中要实现应用间跳转还需要配置协议白名单。在发起跳转的 App 的 Info.plist 文件中增加一个 LSApplicationQueriesSchemes 字段,把它设置为数组类型,并配置需要跳转的协议名单。

  • URL 地址:http://网址 或:https://网址

  • iOS 系统版本 < 10.0

    	NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
    
    	if ([[UIApplication sharedApplication] canOpenURL:url]) {
    
    		[[UIApplication sharedApplication] openURL:url];
    
    	} else {
    NSLog(@"没有安装应用");
    }
  • iOS 系统版本 >= 10.0

    	NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
    
    	if ([[UIApplication sharedApplication] canOpenURL:url]) {
    
    		[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
    
    	} else {
    NSLog(@"没有安装应用");
    }

6、调用应用商店

6.1 调用系统应用商店

  • 找到应用程序的描述链接,然后将 http:// 替换为 itms:// 或者 itms-apps://。比如:

    	http://itunes.apple.com/gb/app/yi-dong-cai-bian/id391945719?mt=8
    
    	itms-apps://itunes.apple.com/gb/app/yi-dong-cai-bian/id391945719?mt=8
    itms://itunes.apple.com/gb/app/yi-dong-cai-bian/id391945719?mt=8
  • URL 地址:itms-apps://网址 或:itms://网址

    	itms-apps://			// 调用系统 App Store 应用
    itms:// // 调用系统 iTunes Store 应用
  • iOS 系统版本 < 10.0

    	NSURL *url = [NSURL URLWithString:@"itms-apps://itunes.apple.com/gb/app/yi-dong-cai-bian/id391945719?mt=8"];
    
    	if ([[UIApplication sharedApplication] canOpenURL:url]) {
    
    		[[UIApplication sharedApplication] openURL:url];
    
    	} else {
    NSLog(@"没有安装应用");
    }
  • iOS 系统版本 >= 10.0

    	NSURL *url = [NSURL URLWithString:@"itms-apps://itunes.apple.com/gb/app/yi-dong-cai-bian/id391945719?mt=8"];
    
    	if ([[UIApplication sharedApplication] canOpenURL:url]) {
    
    		[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
    
    	} else {
    NSLog(@"没有安装应用");
    }

7、保存图片到相册

  • 设置系统访问相册权限

  • 保存图片到相册

    	// 将图片存储到相册中
    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
    	// 将图片存储到相册中,完成后调用指定的方法
    UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); // 保存完成后调用的方法,必须为这个方法
    - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo { }

8、访问通讯录

9、获取 wifi 信息

9.1 获取 wifi 名称信息

  • 具体实现代码见 GitHub 源码 QExtension

    	#import <SystemConfiguration/CaptiveNetwork.h>
    
    	NSString * const BSSIDKey = @"BSSID";
    NSString * const SSIDKey = @"SSID";
    NSString * const SSIDDATAKey = @"SSIDDATA"; // 获取当前 Wifi 信息
    + (NSDictionary *)q_getCurrentWifiInfo { NSDictionary *wifiDic = [NSDictionary dictionary]; CFArrayRef arrayRef = CNCopySupportedInterfaces(); if (arrayRef != nil) { CFDictionaryRef dicRef = CNCopyCurrentNetworkInfo(CFArrayGetValueAtIndex(arrayRef, 0));
    CFRelease(arrayRef); if (dicRef != nil) { wifiDic = (NSDictionary *)CFBridgingRelease(dicRef);
    }
    }
    return wifiDic;
    }
    	// 获取当前 Wifi 信息
    NSDictionary *wifiInfo = [NSDictionary q_getCurrentWifiInfo]; NSLog(@"%@", wifiInfo); NSString *bssid = wifiInfo[BSSIDKey];
    NSString *ssid = wifiInfo[SSIDKey];
    NSString *ssidData = [[NSString alloc] initWithData:wifiInfo[SSIDDATAKey] encoding:NSUTF8StringEncoding]; NSLog(@"%@\n %@\n %@", bssid, ssid, ssidData);

9.2 获取 IP 地址

  • 具体实现代码见 GitHub 源码 QExtension

    	#import <arpa/inet.h>
    #import <ifaddrs.h> // 获取本地 IP 地址
    + (NSString *)q_getIPAddress { NSString *address = @"error";
    struct ifaddrs *interfaces = NULL;
    struct ifaddrs *temp_addr = NULL;
    int success = 0; // retrieve the current interfaces - returns 0 on success
    success = getifaddrs(&interfaces); if (success == 0) { // Loop through linked list of interfaces
    temp_addr = interfaces; while (temp_addr != NULL) { if (temp_addr->ifa_addr->sa_family == AF_INET) { // Check if interface is en0 which is the wifi connection on the iPhone
    if ([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) { // Get NSString from C String
    address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
    }
    }
    temp_addr = temp_addr->ifa_next;
    }
    } // Free memory
    freeifaddrs(interfaces);
    return address;
    }
    	// 获取本地 IP 地址
    NSString *ipStr = [NSString q_getIPAddress]; NSLog(@"%@", ipStr);

iOS - Phone 电话的更多相关文章

  1. iOS拨打电话的三种方式

    iOS拨打电话的三种方式 1,这种方法,拨打完电话回不到原来的应用,会停留在通讯录里,而且是直接拨打,不弹出提示 1 2 var string = "tel:" + "1 ...

  2. 【新手--android日记】实现IOS风格电话界面

    [前言--新手日记] 开始学习android开发,通过做一个通讯录练习,打算实现各种自己想实现的功能. 新手作品,技术含量很浅.主要是记录自己的学习过程. 纯学习之用,求评论,求建议,求教导. [正题 ...

  3. iOS拨打电话(三种方法)

    iOS拨打电话(三种方法)  查了很多地方的关于iOS程序拨打电话,大都不全,今天我总结了三种方法,各有不同,拿来给大家分享,希望给大家有所帮助 1,这种方法,拨打完电话回不到原来的应用,会停留在通讯 ...

  4. IOS 拨打电话:4006 701 855 苹果中国

    IOS 拨打电话:4006 701 855 苹果中国

  5. iOS 拨打电话三种方法

    小弟查了很多地方的关于iOS程序拨打电话,大都不全,今天我总结了三种方法,各有不同,拿来给大家分享,希望给大家有所帮助1,这种方法,拨打完电话回不到原来的应用,会停留在通讯录里,而且是直接拨打,不弹出 ...

  6. iOS voip电话和sip软电话 --网络电话

    一|介绍1.两者区别: SIP软电话与IP电话在技术上属于同一类型,只是SIP软电话是使用电脑软件实现的,而IP电话有一部分是在话机中直接写入了程序,可以通过硬件直接使用.IP(简称VoIP,源自英语 ...

  7. ios 拨打电话

    1,这种方法,拨打完电话回不到原来的应用,会停留在通讯录里,而且是直接拨打,不弹出提示NSMutableString * str=[[NSMutableString alloc] initWithFo ...

  8. iOS 拨打电话三种方式总结

    1,这种方法,拨打完电话回不到原来的应用,会停留在通讯录里,而且是直接拨打,不弹出提示NSMutableString * str=[[NSMutableString alloc] initWithFo ...

  9. iOS拨打电话

    1,这种方法,拨打完电话回不到原来的应用,会停留在通讯录里,而且是直接拨打,不弹出提示NSMutableString * str=[[NSMutableString alloc] initWithFo ...

随机推荐

  1. php7.0.12 laravel 链接sqlserver数据库

    https://www.microsoft.com/en-us/download/details.aspx?id=20098 下载最后一个,然后这个工具可以将dll扩展下载下来,选择一个空白的文件夹就 ...

  2. Spring的Ioc和AOP扩展

    多种方式实现依赖注入: 这里唯一需要说明的是如果要使用P命名空间实现属性注入,需要添加命名空间的声明: 如我的xml里红色字体: <?xml version="1.0" en ...

  3. ruby调试/练习时的小技巧

    必备工具 irb 查祖先 1.9.3-p545 :023 > String.ancestors => [String, Comparable, Object, Kernel, BasicO ...

  4. UVa 10917 Dijkstra

    本来就是水题一道. 题意:一个人要从点1去到点2,中间还有很多点和很多条边.问你如果他每次走的边(a,b)都满足:a点到目标点的最短距离<b点到目标点的最短距离,那么他从点1出发到点2总共有多少 ...

  5. 关于MySQL相关的查看显示信息:

    关于MySQL相关的查看显示信息: 数据库范围: 一.查看所有的数据库:(仅仅是看数据库数量与名字) mysql> show databases; 二.查看某个数据库的创建信息:(主要看数据库的 ...

  6. node上截取图片工具 images(node-images)

    我们经常会遇到服务器上传的图片进行裁剪或者增加logo等等一些操作,在node平台上该如何实现呢? 看到大家都在使用"gm"这个工具,功能很强大,但是在Windows平台上简直就是 ...

  7. python学习笔记之迭代器和函数(第三天)

    一.collection系列: 1.counter计数器 如果counter(dict)是对字典的一个补充,如果counter(list)则是对列表的补充,初步测试对字典的值进行排序. ####### ...

  8. Linux中profile文件详解(转)

    1.Linux是一个多用户的操作系统.每个用户登录系统后,都会有一个专用的运行环境.通常每个用户默认的环境都是相同的,这个默认环境实际上就是一组环境变量的定义.用户可以对自己的运行环境进行定制,其方法 ...

  9. 怎么计算一个具体InnoDB的索引大小

    一般情况下,我们看表信息可以用这个命令show table status: mysql> show table status like 't'\G . row ***************** ...

  10. Java数据结构之对称矩阵的压缩算法---

    特殊矩阵 特殊矩阵是指这样一类矩阵,其中有许多值相同的元素或有许多零元素,且值相同的元素或零元素的分布有一定规律.一般采用二维数组来存储矩阵元素.但是,对于特殊矩阵,可以通过找出矩阵中所有值相同元素的 ...