iOS - Phone 电话

本文涉及的产品
文档翻译,文档翻译 1千页
语种识别,语种识别 100万字符
图片翻译,图片翻译 100张
简介: 1、调用电话1.1 拨打系统电话调用系统自带的打电话程序,要跳转到打电话程序,打完电话自动跳转回来。在 iOS9.0 + 系统隐私控制里禁止查询设备中已安装的 App,所以在 iOS9.0 + 系统中要实现应用间跳转还需要配置协议白名单。

1、调用电话

1.1 拨打系统电话

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

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

    tel1

  • 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 字段,把它设置为数组类型,并配置需要跳转的协议名单。

    sms1

  • 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 框架。

    sms2

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

        // 引入头文件
        #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 字段,把它设置为数组类型,并配置需要跳转的协议名单。

    mail1

  • 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 框架。

    mail2

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

        // 引入头文件
        #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 字段,把它设置为数组类型,并配置需要跳转的协议名单。

    maps1

  • 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 字段,把它设置为数组类型,并配置需要跳转的协议名单。

    safari1

  • 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、保存图片到相册

  • 设置系统访问相册权限

    photosAlbum1

  • 保存图片到相册

        // 将图片存储到相册中
        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);
目录
相关文章
|
Android开发 iOS开发 Windows
Android、iOS和Windows Phone中的推送技术
 Android、iOS和Windows Phone中的推送技术    推送并不是什么新技术,这种技术在互联网时代就已经很流行了。只是随着进入移动互联网时代,推送技术显得更加重要。
1358 0
|
1月前
|
iOS开发 开发者
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
152 67
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
|
3月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
13天前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
40 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
2月前
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
150 66
|
1天前
|
人工智能 程序员 API
iOS|记一名 iOS 开发新手的前两次 App 审核经历
啥,这玩意也有新手保护期?
9 0
|
2月前
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
106 11

热门文章

最新文章

  • 1
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 2
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 3
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 4
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 5
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 6
    iOS各个证书生成细节
  • 7
    iOS|记一名 iOS 开发新手的前两次 App 审核经历
  • 8
    iOS:应用程序的线程安全性
  • 9
    iOS开发-UIScrollView原理
  • 10
    iOS - Swift NSPoint 位置
  • 1
    iOS|记一名 iOS 开发新手的前两次 App 审核经历
    9
  • 2
    iOS各个证书生成细节
    22
  • 3
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    115
  • 4
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    40
  • 5
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    55
  • 6
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    46
  • 7
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    40
  • 8
    uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
    152
  • 9
    【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
    302
  • 10
    app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
    106