最近再做視頻播放的項(xiàng)目,有個(gè)需求就是監(jiān)聽系統(tǒng)來電,遇到一些小坑叫乌,找不到合適的資料,于是總結(jié)一下徽缚。
<p>代碼如下:
CoreTelephony/CTCallCenter框架定義了一個(gè)在app運(yùn)行時(shí)憨奸,監(jiān)聽來電的block,用來app處理在來電時(shí)的各種情況凿试。
在回調(diào)中排宰,定義了四周類型:
</p><pre><code>這是一個(gè)代碼區(qū)塊。
</code>p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; min-height: 13.0px}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #d12f1b}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #78492a}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo}span.s1 {font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures; color: #78492a}span.s3 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s4 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s5 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s6 {font-variant-ligatures: no-common-ligatures; color: #272ad8}
import <Foundation/Foundation.h>
import <CoreTelephony/CoreTelephonyDefines.h>
NS_ASSUME_NONNULL_BEGIN
CORETELEPHONY_EXTERN NSString * const CTCallStateDialing __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_0);
CORETELEPHONY_EXTERN NSString * const CTCallStateIncoming __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_0);
CORETELEPHONY_EXTERN NSString * const CTCallStateConnected __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_0);
CORETELEPHONY_EXTERN NSString * const CTCallStateDisconnected __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_0);
CORETELEPHONY_CLASS_AVAILABLE(4_0)</pre>
這個(gè)block红省,在來電時(shí)额各,會被調(diào)用多次,第一次觸發(fā)CTCallStateIncoming吧恃,當(dāng)無人接聽或者掛斷虾啦,會再次調(diào)用block,觸發(fā)CTCallStateDisconnected,有人接聽觸發(fā)CTCallStateConnected傲醉,所以蝇闭,這個(gè)block至少會觸發(fā)兩次,最多觸發(fā)四次硬毕。
注:CTCallCente必須用全局
</p><pre><code>
//
// ViewController.m
// cll
//
// Created by ChangQing Yang on 16/6/1.
// Copyright ? 2016年 ChangQing Yang. All rights reserved.
//
import "ViewController.h"
//導(dǎo)入系統(tǒng)的頭文件
import <CoreTelephony/CTCallCenter.h>
import <CoreTelephony/CTCall.h>
@interface ViewController ()
@property(nonatomic,strong)CTCallCenter *callCenter; //必須在這里聲明呻引,要不不會回調(diào)block
@end
@implementation ViewController
-
(void)viewDidLoad {
[super viewDidLoad];
_callCenter = [[CTCallCenter alloc] init];
_callCenter.callEventHandler=^(CTCall* call){
if([call.callState isEqualToString:CTCallStateDisconnected]) { NSLog(@"Call has been disconnected"); } else if([call.callState isEqualToString:CTCallStateConnected]) { NSLog(@"Callhasjustbeen 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"); }
};
} </pre>
小結(jié):
根據(jù)需求來做相應(yīng)block里面回調(diào)的處理,注意考慮在block里面操作的時(shí)候要定義__bolck吐咳。
如發(fā)現(xiàn)錯誤或不足逻悠,歡迎指正,如有需要韭脊,聯(lián)系qq 1392550437.
謝謝童谒。