文档章节

iOS获取来电和短信发送状态

hejunbinlan
 hejunbinlan
发布于 2016/05/13 11:09
字数 842
阅读 38
收藏 1

获取电话状态

在我想要了解iOS获取来电状态时,经常被这是不是允许的,是不是要调用私有库等问题困扰。费了好大劲终于解决了上面问题,你可以获取系统提供的电话相关状态,而且它不属于私有库。为了需要这方面资料的人查阅时少走弯路,我把这些东西写下来,废话少说,上代码。

如何获取电话状态

首先要导入CoreTelephony框架:
@import CoreTelephony;

然后声明一个CTCallCenter变量:

@interface ViewController () {  
CTCallCenter *center_;   //为了避免形成retain cycle而声明的一个变量,指向接收通话中心对象
}  
@end

然后监听电话状态:

- (void) aboutCall{   
    //获取电话接入信息
callCenter.callEventHandler = ^(CTCall *call){
    if ([call.callState isEqualToString:CTCallStateDisconnected]){
        NSLog(@"Call has been disconnected");

    }else if ([call.callState isEqualToString:CTCallStateConnected]){
        NSLog(@"Call has just been connected");

    }else if([call.callState isEqualToString:CTCallStateIncoming]){
        NSLog(@"Call is incoming");

    }else if ([call.callState isEqualToString:CTCallStateDialing]){
        NSLog(@"call is dialing");

    }else{
        NSLog(@"Nothing is done");
    }
};
}

还可以获取运营商信息:

- (void)getCarrierInfo{
// 获取运营商信息
CTTelephonyNetworkInfo *info = [[CTTelephonyNetworkInfo alloc] init];
CTCarrier *carrier = info.subscriberCellularProvider;
NSLog(@"carrier:%@", [carrier description]);

// 如果运营商变化将更新运营商输出
info.subscriberCellularProviderDidUpdateNotifier = ^(CTCarrier *carrier) {
    NSLog(@"carrier:%@", [carrier description]);
};

// 输出手机的数据业务信息
NSLog(@"Radio Access Technology:%@", info.currentRadioAccessTechnology);
}

当然这样在真机进行测试,以下为输出信息:

2015-12-29 16:34:14.525 RWBLEManagerDemo[1489:543655] carrier:CTCarrier (0x134e065c0) {
Carrier name: [中国移动]
Mobile Country Code: [460]
Mobile Network Code:[07]
ISO Country Code:[cn]
Allows VOIP? [YES]
}
2015-12-29 16:34:14.526 RWBLEManagerDemo[1489:543655] Radio Access Technology:CTRadioAccessTechnologyHSDPA

CoreTelephony框架是不是私有库

私有框架的目录为:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/PrivateFrameworks/

FDC2B801-0F1C-41FD-A9A4-399592DF4BEF.png

可以看出CoreTelephony框架是在frameworks内而不是PrivateFrameworks,所以它是可以放心使用的。网上之所以有说CoreTelephony是私有库,是因为在iOS6的时候是私有框架,后来苹果又给公开了。

获取短信状态

关于短信的状态获取,我直接看了
#import <MessageUI/MessageUI.h>
里面就两个头文件:

#import <MessageUI/MFMailComposeViewController.h>
#import <MessageUI/MFMessageComposeViewController.h>

一个是邮件相关的方法,一个短信相关的方法。进到MFMessageComposeViewController.h有一个枚举值:

enum MessageComposeResult {
MessageComposeResultCancelled,
MessageComposeResultSent,
MessageComposeResultFailed
};
typedef enum MessageComposeResult MessageComposeResult;   // available in iPhone 4.0

这是表示短信发送状态的值。要使用这个框架发送自己编辑的内容还需要添加代理:MFMessageComposeViewControllerDelegate

代码如下:

- (void)showMessageView
{
if( [MFMessageComposeViewController canSendText] )// 判断设备能不能发送短信
{
    MFMessageComposeViewController*picker = [[MFMessageComposeViewControlleralloc] init];
    // 设置委托
    picker.messageComposeDelegate= self;
    // 默认信息内容
    picker.body = @"nihao";
    // 默认收件人(可多个)
    picker.recipients = [NSArray arrayWithObject:@"12345678901", nil];
    [self presentModalViewController:picker animated:YES];
    [picker release];
}
else
{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示信息"
                                                    message:@"该设备不支持短信功能"
                                                   delegate:self
                                          cancelButtonTitle:nil
                                          otherButtonTitles:@"确定", nil];
    [alert show];
    [alert release];
}
}

- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
{
switch (result){
    case MessageComposeResultCancelled:
        NSLog(@"取消发送");
        break;
    case MessageComposeResultFailed:
        NSLog(@"发送失败");
        break;
    case MessageComposeResultSent:
        NSLog(@"发送成功");
        break;

    default:
        break;
}
}

对于来短信的通知没有找到,应该是不能获取的。

参考资料


 

文/勇闯天涯茉莉花茶(简书作者)
原文链接:http://www.jianshu.com/p/61f964209344
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

本文转载自:http://www.jianshu.com/p/61f964209344

共有 人打赏支持
hejunbinlan
粉丝 41
博文 596
码字总数 21569
作品 0
浦东
高级程序员
私信 提问
iOS 获取来电号码

需要获取来电号码和收到的短信内容,iOS9以上也要能用,不能越狱,只需要把来电号码和收到的短信内容打印出来即可,不需要其它功能,界面也没要求可以没有,代码多少无所谓,代码质量也没要求...

yjkj
2016/10/18
1
0
Telephony Function(通话和短信功能)

概述 在开发应用时,我们经常遇到需要调用系统内置的应用来完成一些功能,如拨打电话、发送短信和电子邮件、选择联系人等。Android中利用Intend不仅可以调用同意应用程序内Activity,也可以调...

失足处男的倒霉孩子
2013/12/27
722
0
iOS 8.1 发布:Apple Pay、相机胶卷、错误修正

苹果今天正式推出了 iOS 8.1,这是自 iOS 8 发布后幅度最大的一次更新。iOS 8.1 为系统增加了很多新功能,开启了 Apple Pay 支付服务,让 Yosemite 用户可以使用 Continuity 的短信功能,以及...

oschina
2014/10/21
2.2K
13
苹果公司发布 iOS 8 重新定义通知中心

6月3日消息,一年一度的苹果开发者大会于北京时间6月3日凌晨1点在美国旧金山开幕。苹果公司在会上发布了最新的移动设备操作系统iOS 8。 据介绍,在全新的iOS 8中,苹果重新定义了通知中心,可...

oschina
2014/06/03
1K
4
Android 3.1和iOS 5以及WP7.1 Mango对比

目前就发布时间来看 Android 3.1已经发布,iOS 5还要过几个月等iPhone 4S上市,而WP7的芒果估计要到9月份了。很多开发者对Android 3.1、iOS 5和Windows Phone 7.1 Mango之间新特性的对比还不...

小卒过河
2011/06/10
767
2

没有更多内容

加载失败,请刷新页面

加载更多

CDH5动静态资源池配置与回滚

关于动态 静态资源池的配置以前都有提过,可以从以下几篇了解: YARN动态资源池配置案例 https://yq.aliyun.com/ziliao/346856# Hadoop YARN配置参数剖析(4)—Fair Scheduler相关参数 Hadoop...

hblt-j
10分钟前
0
0
WordPress仿站实战教程

有一个月没有写blog了,一直在学习wordpress的知识,现在能够进行简单的政府企业门户网站的仿制,wordpress的主题订制,一般是对前端要求比较高,wordpress学会了,建站还是非常的快的。下面...

临江仙卜算子
13分钟前
0
0
图像库stb_image

https://github.com/nothings/stb 目前一般主流的图像格式也就是bmp,jpg,png,tga,dds,除了DDS一般是给DX用的,虽然一堆OpenGL程序也有用的,但是我一般只用png和tga, png不用说了,带a...

robslove
39分钟前
1
0
Spring 事务提交回滚源码解析

前言 在上篇文章 Spring 事务初始化源码分析 中分析了 Spring 事务初始化的一个过程,当初始化完成后,Spring 是如何去获取事务,当目标方法异常后,又是如何进行回滚的,又或是目标方法执行...

TSMYK
58分钟前
2
0
百度黄埔学院将培养一批首席AI架构师,为“国之重器”赋能

深度学习高端人才不仅是AI发展的重要养分,也是企业转型AI巨大推动力。2019年1月19日,百度黄埔学院——深度学习架构师培养计划在百度科技园举行开学典礼,深度学习技术及应用国家工程实验室...

深度学习之桨
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部