iOS之[打電話,發短信/郵件,打開URL...]

1.打開URL

系統支持的 URL scheme 包括:mailto://、tel://、sms://、 maps://web

NSURL *URL = [NSURL URLWithString:@"http://nshipster.com"]; 
[[UIApplication sharedApplication] openURL:URL];

2.打電話

2.1打電話不返回APP(URL方式)
- (void)tel1
{
    // 直接撥號,撥號完成後會停留在通話記錄中
    NSURL *url = [NSURL URLWithString:@"tel://10010"];
    
    [[UIApplication sharedApplication] openURL:url];
}
2.2打電話返回APP(URL方式)

telprompt協議屬於蘋果的私有協議,一旦程序中使用了此協議,程序沒法上架網絡

針對越獄的機器開發的系統,能夠使用此協議框架

- (void)tel2
{
    NSURL *url = [NSURL URLWithString:@"telprompt://10010"];
    
    [[UIApplication sharedApplication] openURL:url];
}
2.3打電話返回APP(藉助UIWebView打電話)

若是須要返回APP,通常都是用這種,解決了不越獄的問題ui

- (void)tel3
{
    // 提示:不要將webView添加到self.view,若是添加會遮擋原有的視圖
    // 懶加載
    if (_webView == nil) {
        _webView = [[UIWebView alloc] init];
    }
    
//    _webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
//    [self.view addSubview:_webView];
    
    NSURL *url = [NSURL URLWithString:@"tel://10010"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    
    [_webView loadRequest:request];
}

3.發短信

3.1發短信-URL方式

①不能指定短信內容url

②發送完短信後,會留在IMessage界面代理

NSURL *url = [NSURL URLWithString:@"sms://10010"];
[[UIApplication sharedApplication] openURL:url];
3.2發短信-藉助UIMessage框架

①能夠返回APPcode

②支持多人發送(羣發)對象

③能夠自定義消息,消息支持HTML格式的ip

並且若是在蘋果系統中,若是彼此的手機都是iOS設備,而且開通了iMessage功能,彼此之間的短信是走網絡通道,而不走運營商的通道!ci

- (void)msg
{
    // 判斷用戶設備可否發送短信
    if (![MFMessageComposeViewController canSendText]) {
        return;
    }
    
    // 1. 實例化一個控制器
    MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init];
    
    // 2. 設置短信內容
    // 1) 收件人
    controller.recipients = @[@"10010", @"10086"];
    // 2) 短信內容
    controller.body = @"給您拜個晚年,祝您晚年快樂!";
    // 3) 設置代理
    controller.messageComposeDelegate = self;

    // 3. 顯示短信控制器
    [self presentViewController:controller animated:YES completion:nil];
}

發送完消息後,記得調用代理方法,關閉窗口

#pragma mark 短信控制器代理方法
/**
 短信發送結果
 
 MessageComposeResultCancelled,     取消
 MessageComposeResultSent,          發送
 MessageComposeResultFailed         失敗
 */
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
{
    
    // 在面向對象程序開發中,有一個原則,誰申請,誰釋放!
    // *** 此方法也能夠正常工做,由於系統會將關閉消息發送給self
//    [controller dismissViewControllerAnimated:YES completion:nil];
    
    // 應該用這個!!!
    [self dismissViewControllerAnimated:YES completion:nil];
}

4.發郵件-UIMessage

- (void)sendmail
{
    // 1. 先判斷可否發送郵件
    if (![MFMailComposeViewController canSendMail]) {
        // 提示用戶設置郵箱
        return;
    }
    
    // 2. 實例化郵件控制器,準備發送郵件
    MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init];
    
    // 1) 主題 xxx的工做報告
    [controller setSubject:@"個人工做報告"];

    // 2) 收件人
    // 3) cc 抄送:- (void)setCcRecipients:(NSArray<NSString *> *)ccRecipients 
    // 4) bcc 密送:- (void)setBccRecipients:(NSArray<NSString *> *)bccRecipients
    [controller setToRecipients:@[@"4800607@gmail.com"]];

    // 5) 正文
    [controller setMessageBody:@"這是個人<font color=\"blue\">工做報告</font>,請審閱!<BR />P.S. 個人頭像牛X嗎?" isHTML:YES];
    
    // 6) 附件
    UIImage *image = [UIImage imageNamed:@"頭像1.png"];
    NSData *imageData = UIImagePNGRepresentation(image);
    // 1> 附件的二進制數據
    // 2> MIMEType 使用什麼應用程序打開附件
    // 3> 收件人接收時看到的文件名稱
    // 能夠添加多個附件
    [controller addAttachmentData:imageData mimeType:@"image/png" fileName:@"頭像.png"];
    
    // 7) 設置代理
    [controller setMailComposeDelegate:self];
    
    // 顯示控制器
    [self presentViewController:controller animated:YES completion:nil];
}

發送完郵件以後記得關閉窗口

#pragma mark - 郵件代理方法
/**
 MFMailComposeResultCancelled,      取消
 MFMailComposeResultSaved,          保存郵件
 MFMailComposeResultSent,           已經發送
 MFMailComposeResultFailed          發送失敗
 */
- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
    
    [self dismissViewControllerAnimated:YES completion:nil];
}

5.保存到相冊

UIImage *image = ...; 
id completionTarget = self; 
SEL completionSelector = @selector(didWriteToSavedPhotosAlbum); 
void *contextInfo = NULL; 

UIImageWriteToSavedPhotosAlbum(image, completionTarget, completionSelector, contextInfo);

6.添加到 Safari 閱讀列表

@import SafariServices; 
 
NSURL *URL = [NSURL URLWithString:@"http://nshipster.com/uiactivityviewcontroller"]; 
[[SSReadingList defaultReadingList] addReadingListItemWithURL:URL 
                                                        title:@"NSHipster" 
                                                  previewText:@"..." 
                                                        error:nil];
相關文章
相關標籤/搜索