iOS手机功能汇总
开发中经常会调用手机功能,今天来汇总一下,若有不足欢迎大家指出,下面分别介绍如下功能 :
- 电话
- 短信
- 邮件
- 通讯录
- 定位
- 跳转应用
- 跳转App Store
- 打开其他文件
电话
调用电话有下图两种不同样式,相同的是,通话结束后均会返回你原界面
1- 直接跳至拨号界面
2- 先弹框提示,用户确认后再跳至拨号界面
- 直接跳至拨号界面
NSURL *url = [NSURL URLWithString:@"tel://10000000"];
[[UIApplication sharedApplication] openURL:url];
- 弹框提示有两种实现方式
1- UIApplication打开URL
NSURL *url = [NSURL URLWithString:@"telprompt://10000000"];
[[UIApplication sharedApplication] openURL:url];
2- UIWebView加载URL
//WebView若只实现打电话功能,可以不设置尺寸,以防挡住其他
UIWebView *_web;
_web= [[UIWebView alloc] initWithFrame:CGRectZero];
//在需要调用的地方调用
[_web loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"tel://10000000"]]];
短信
短信一般是服务器发
短信样式一样,都是直接跳至短信编辑界面,有两种实现方式
1- UIApplication打开URL方式
跳至短信编辑页面后,用户手动编辑短信内容,完成后返回短信列表界面
缺点: 不能指定短信内容,不能自动回到原应用程序
2- MFMessageComposeViewController方式
和方式1比:
可以提前编辑好短信内容,跳至短信编辑界面时带有内容
可以群发
完成后可以返回原应用程序
- UIApplication打开URL方式
NSURL *url = [NSURL URLWithString:@"sms://100000"];
[[UIApplication sharedApplication] openURL:url];
- MFMessageComposeViewController方式
.导入框架并实现协议
#import <MessageUI/MessageUI.h>
@interface ViewController ()<MFMessageComposeViewControllerDelegate> .编辑短信内容,群发对象,设置代理并弹出短信界面
MFMessageComposeViewController *messageVC = [[MFMessageComposeViewController alloc] init];
messageVC.body = @"你好,我是亲爱的大倩倩";
messageVC.recipients = @[@"",@"",@""];
messageVC.messageComposeDelegate = self;
[self presentViewController:messageVC animated:YES completion:nil]; .实现代理:短信发完后的回调,在此方法中设置返回原应用程序
参数1: 短信控制器
参数2:短信发送结果
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
{
[controller dismissViewControllerAnimated:YES completion:nil]; NSString *messageResult;
if (result == MessageComposeResultCancelled)
messageResult = @"短信取消发送";
else if(result == MessageComposeResultSent)
messageResult = @"短信已发送";
else
messageResult = @"短信发送失败!"; UIAlertController *alertController = [UIAlertController alertControllerWithTitle:messageResult message:nil preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *myAction = [UIAlertAction actionWithTitle:@"我知道了" style:UIAlertActionStyleCancel handler:nil];
[alertController addAction:myAction];
[self presentViewController:alertController animated:YES completion:nil]; }
邮件
邮件有两种实现方式:
1- UIApplication打开URL方式
不可提前编辑,发送后不会回到原应用程序
2- MFMailComposeViewController方式
可提前编辑,可群发,可带图片,附件,视频等,发送后退回原应用程序
- 用自带的邮件客户端(你绑定的邮箱是什么则发件人就是谁),发送完成后不会返回原应用程序
NSURL *url = [NSURL URLWithString:@"mailto://0000000@qq.com"];
[[UIApplication sharedApplication] openURL:url];
- MFMailComposeViewController方式
.导入框架并实现协议
#import <MessageUI/MessageUI.h>
@interface ViewController ()<MFMailComposeViewControllerDelegate> //在触发发送邮件的方法中设置2,3,4步
.先判断是否开启了邮箱权限
if (![MFMailComposeViewController canSendMail])
{
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"不能发送邮件" message:@"请检查邮箱设置" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *myAction = [UIAlertAction actionWithTitle:@"我知道了" style:UIAlertActionStyleCancel handler:nil];
[alertController addAction:myAction];
[self presentViewController:alertController animated:YES completion:nil];
return;
} .声明MFMailComposeViewController对象,设置代理及其他属性
MFMailComposeViewController *mailVC = [[MFMailComposeViewController alloc] init];
mailVC.mailComposeDelegate = self;
//设置收件人
[mailVC setToRecipients:@[@"000000@qq.com",@"111111@qq.com"]];
// //添加抄送及密送
// NSArray *ccRecipients = [NSArray arrayWithObjects:@"second@example.com", @"third@example.com", nil];
// [mailVC setCcRecipients:ccRecipients];
// NSArray *bccRecipients = [NSArray arrayWithObjects:@"fourth@example.com", nil];
// [mailVC setBccRecipients:bccRecipients];
//设置主题
[mailVC setSubject:@"全体通知"];
//添加邮件正文
[mailVC setMessageBody:@"今天16:00办公室停电,大家提前下班吧" isHTML:NO];
//添加照片
UIImage *addPic = [UIImage imageNamed:@"icon_star_full@2x.png"];
NSData *imageData = UIImagePNGRepresentation(addPic);
[mailVC addAttachmentData:imageData mimeType:@"" fileName:@"icon_star_full.png"];
//还可以添加pdf文件及视频 .跳转界面
[self presentViewController:mailVC animated:YES completion:nil]; .实现代理
- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
[controller dismissViewControllerAnimated:YES completion:nil]; NSString *mailResult;
switch (result)
{
case MFMailComposeResultCancelled:
mailResult = @"用户取消编辑邮件";
break;
case MFMailComposeResultSaved:
mailResult = @"用户成功保存邮件";
break;
case MFMailComposeResultSent:
mailResult = @"用户点击发送,将邮件放到队列中,还没发送";
break;
case MFMailComposeResultFailed:
mailResult = @"用户试图保存或者发送邮件失败";
break;
default:
mailResult = @"";
break;
}
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:mailResult message:nil preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *myAction = [UIAlertAction actionWithTitle:@"我知道了" style:UIAlertActionStyleCancel handler:nil];
[alertController addAction:myAction];
[self presentViewController:alertController animated:YES completion:nil];
}
邮件这个按钮要打开,不然无法发送
QQ网页版收到的邮件如下图:
通讯录
使用AddressBook和AddressBookUI框架实现
1- 导入框架
AddressBook.framework和AddressBookUI.framework
2- 导入头文件
#import <AddressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h>,
3- 实现协议并跳转通讯录界面
@interface ViewController ()<ABPeoplePickerNavigationControllerDelegate, UINavigationControllerDelegate> //在按钮点击事件中跳转
ABPeoplePickerNavigationController *peopleVC = [[ABPeoplePickerNavigationController alloc] init];
peopleVC.peoplePickerDelegate = self; [self presentViewController:peopleVC animated:YES completion:nil];
4- 有很多代理方法,不一一阐述了
定位
使用CLLocationManager来实现定位
1- 导入CoreLocation.framework框架
2- 导入头文件,实现协议
#import <CoreLocation/CoreLocation.h> @interface ViewController ()<CLLocationManagerDelegate>
3- iOS8以上需要在Info.Plist文件中添加如下配置
(1)NSLocationAlwaysUsageDescription
(2)NSLocationWhenInUseUsageDescription
4- 声明CLLocationManager对象,开启定位
@property (nonatomic, strong) CLLocationManager *locationManager; - (void)viewDidLoad
{
_locationManager=[[CLLocationManager alloc] init];
_locationManager.delegate=self; //多少米定位一次
// _locationManager.desiredAccuracy = 0;
// _locationManager.distanceFilter = 500; //初次打开时会有弹框提示,是否允许定位
if ([_locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)])
{
[_locationManager requestWhenInUseAuthorization];
}
//开启定位
[_locationManager startUpdatingLocation];
}
5- 实现代理方法,会返给你地理位置信息,需要自己解码
.声明字典,用于接收解码后的信息
@interface ViewController ()<CLLocationManagerDelegate>
{
NSDictionary *_addressDic;
} .实现代理
#pragma mark - 位置信息更新后,获取经纬度的代理方法
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations
{
NSLog(@"定位成功");
CLLocation *location = [locations lastObject];
CLLocationCoordinate2D coordinate2D = location.coordinate;
NSLog(@"经纬度为----%f----%f",coordinate2D.latitude,coordinate2D.longitude); [_locationManager stopUpdatingLocation]; // 反编码对象
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
[geocoder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error)
{
CLPlacemark *placemark = [placemarks lastObject];
_addressDic = placemark.addressDictionary;
NSLog(@"地理位置信息:%@",_addressDic);
NSString *cityStr = _addressDic[@"City"];
NSLog(@"city:%@",_addressDic[@"City"]);
NSArray *arr = [cityStr componentsSeparatedByString:@"市"];
cityStr = [arr firstObject];
NSLog(@"截取的值为:%@",cityStr);
}];
}
跳转应用
使用UIApplication打开URL的方法
跳转应用就是在应用A中,某些操作后跳转至应用B,拿我的两个现有的应用举例,一个应用名字为"手机功能",就是写这篇文章的Demo,另一个应用名字为"FQMusicPlayer",现在实现点击"手机功能"界面中的button时,跳转至"FQMusicPlayer"
1- 需要配置"FQMusicPlayer"的url地址
2- "手机功能"跳至这个url地址即可
- 配置地址
可以直接配置如下图所示,跳转时跳至@"fq:"即可
也可配置下图,跳转时需要跳转@"fq://iOS.cn"
- 跳转url
NSURL *url = [NSURL URLWithString:@"fq://iOS.cn"];
[[UIApplication sharedApplication] openURL:url];
备注 : 如果跳转时,是新打开"FQMusicPlayer",会调用didFinishLaunchingWithOptions方法,若它之前在后台运行,不会调用此方法
如果一个应用被另外一个应用打开,会调用下面的代理方法,可以在该方法中可以实现两个应用之间数据的传递
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
NSLog(@"%@,%@",url,sourceApplication);
return YES;
}
跳转至App Store
使用UIApplication打开URL方法
1- 首先拿到你要跳转的App Store地址(url),例如我们现在跳转至节奏大师,它的地址是https://itunes.apple.com/cn/app/jie-zou-da-shi/id493901993?mt=8
2- 将 http:// 替换为 itms:// 或者 itms-apps://,再调用代码即可
NSString *str = @"itms://itunes.apple.com/cn/app/jie-zou-da-shi/id493901993?mt=8";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]];
打开其它文件
拿pdf举例
- 若是远程访问的资源,可以用两方式打开:
1- UIApplication打开URL,会跳转Safari浏览器浏览网页
2- UIWebView打开URL,需要设置UIWebView的frame,内容在UIWebView上显示
拿百度网址举例吧,没找到远程的pdf文件
.UIApplication打开URL NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
[[UIApplication sharedApplication] openURL:url]; .UIWebView打开URL NSURL *targetURL = [NSURL URLWithString:@"http://www.baidu.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
[_web loadRequest:request];
访问网址还需要配置下图
- 若是访问本地的pdf文件(沙盒中),pdf文件是要可读的啊,不然不显示的
1- 若是真机,将文件直接拖进来
2- 若是模拟器,打印你的沙盒路径,打开Finder,command + shift + G,将文件放进去即可
NSString *path = [[NSBundle mainBundle] pathForResource:@"Swift" ofType:@"pdf"];
NSURL *url =[NSURL fileURLWithPath:path];
NSURLRequest*request =[NSURLRequest requestWithURL:url];
[_web loadRequest:request];
iOS手机功能汇总的更多相关文章
- 苹果iOS手机系统诊断功能是后门吗?
7月20日,美国知名苹果iOS手机系统侦破专家扎德尔斯基在2014年世界黑客大会(HOPE/X)用幻灯片讲演揭露了苹果手机存在系统级"后门". 为此,7月23日.苹果公司马上做出回 ...
- 苹果iOS手机后门的”诊断功能论“不攻自破
7月23日.苹果公司公布公告,题为"iOS:About diagnostic capabilities"("iOS:关于诊断功能").当中声称:iOS offe ...
- Web程序员开发App系列 - 调试Android和IOS手机代码(补图)
Web程序员开发App系列 Web程序员开发App系列 - 认识HBuilder Web程序员开发App系列 - 申请苹果开发者账号 Web程序员开发App系列 - 调试Android和iOS手机代码 ...
- 利用exif.js解决ios手机上传竖拍照片旋转90度问题
html5+canvas进行移动端手机照片上传时,发现ios手机上传竖拍照片会逆时针旋转90度,横拍照片无此问题:Android手机没这个问题. 因此解决这个问题的思路是:获取到照片拍摄的方向角,对非 ...
- iOS Simulator功能介绍关于Xamarin IOS开发
iOS Simulator功能介绍关于Xamarin IOS开发 iOS Simulator功能介绍 在图1.38所示的运行效果中,所见到的类似于手机的模型就是iOS Simulator.在没有iPh ...
- Appium - iOS 各种问题汇总
Appium - iOS 各种问题汇总 作者: Max.Bai 时间: 2014/10 Appium - iOS 各种问题汇总 1. Appium 滑动: swipe 有三种方式: 第一种:swi ...
- iOS 学习资料汇总
(适合初学者入门) 本文资料来源于GitHub 一.视频教程(英文) Developing iOS 7 Apps for iPhone and iPad斯坦福开放教程之一, 课程主要讲解了一些 iOS ...
- 解决ios手机上传竖拍照片旋转90度问题
html5+canvas进行移动端手机照片上传时,发现ios手机上传竖拍照片会逆时针旋转90度,横拍照片无此问题:Android手机没这个问题. 因此解决这个问题的思路是:获取到照片拍摄的方向角,对非 ...
- ios手机录屏软件哪个好
苹果手机中的airplay镜像,是苹果手机系统的一大特色,可以轻松把手机屏幕投射电脑,这个功能使苹果手机相较安卓手机投屏会更加轻松,那么如何实现苹果手机投射电脑屏幕?下面小编便来分享ios手机录屏软件 ...
随机推荐
- Django 后台管理设置(admin.py)
上面是两种后台效果图,第一张是默认情况下Django的后台,第二张是稍作修改后的情况,下面记录下作了哪些修改: 代码: class ArticleAdmin(admin.ModelAdmin): li ...
- truncate table语句和delete table语句的区别
truncate table 表名 ; delete from 表名; 都是用来删除表中所有的记录,前者删除数据后表的标识列会重新开始编号,它比delete语句使用的系统资源和事务日志资源更少,但是表 ...
- Mvc public virtual DbQuery<TResult> Include("")
参数 path 类型:System.String要在查询结果中返回的相关对象列表(以点号分隔). 返回值 类型:System.Data.Entity.Infrastructure.DbQuery< ...
- IOS 解析crashlog
1.需要log.crash. dSYM和xcode自带的symbolicatecrash 放到一个文件夹下面 2.终端cd 到文件夹下面 运行命令 export DEVELOPER_DIR=/Appl ...
- opencv基于混合高斯模型的图像分割
#include "stdafx.h" #include <opencv\cv.h> #include <opencv\highgui.h> #includ ...
- 世界国家 的数据库sql
, '中国', 'CHINA'); , '阿尔巴尼亚', 'ALB'); , '阿尔及利亚', 'DZA'); , '阿富汗', 'AFG'); , '阿根廷', 'ARG'); , '阿拉伯联合酋长 ...
- gulp使用笔记
gulp简介 gulp 是基于 Nodejs 的自动任务运行器,能自动化地完成javascript/coffee/sass/less/html/image/css等文件的的测试.检查.合并.压缩.格式 ...
- ios 使用Core Image实现高斯模糊
在iOS和OS X平台上,Core Image都提供了大量的滤镜(Filter),这也是Core Image库中比较核心的东西之一.按照官方文档记载,在OS X上有120多种Filter,而在iOS上 ...
- 原生js事件和jquery事件的执行顺序问题
场景:近日,写前端页面时候,在针对输入框input操作时,用到了jquery的插件,插件中使用了jquery的focus()和blur()方法.但是同时,又需要在插件之外再针对输入框的获取焦点和失去焦 ...
- js 表格实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...