美文网首页iOS
电话状态监听 - iOS

电话状态监听 - iOS

作者: survivorsfyh | 来源:发表于2018-05-18 10:37 被阅读280次

今天接到一个监听状态的需求,当使用 App 时若电话介入需要对当前状态进行监听操作(注:并非通话内容),根据不同的状态实行相关的需求操作,废话不多说步骤如下.

首先,常规操作先引用对应的头文件,来为后续功能铺路.

#import <CoreTelephony/CTCallCenter.h>

#import <CoreTelephony/CTCall.h>

其次,需要设置一个全局的属性,若在 viewDidLoad 方法中创建该属性的话, viewDidLoad 调用结束该创建的属性就会被销毁掉,则后续方法步骤都将失效,从而无法检测到来点状态.

/** 呼叫中心*/

@property (nonatomic, strong) CTCallCenter *callCenter;

再其次,便是具体监听逻辑,code 如下.

#pragma mark - ************************************************ (监听电话相关)

/**

 监听电话介入

 */

- (void)monitorTelephoneCall {

    kWeakSelf(self);

    // MsgAppStarting

    // MsgAppReactivate

    _callCenter = [[CTCallCenter alloc] init];

    _callCenter.callEventHandler = ^(CTCall * call) {

        if ([call.callState isEqualToString:CTCallStateDisconnected]) {// Call has been disconnected

            NSLog(@"电话 --- 断开连接");

        }

        else if ([call.callState isEqualToString:CTCallStateConnected]) {// Call has just been connected

            NSLog(@"电话 --- 接通");

            // 通知 H5 当前截屏操作

            dispatch_async(dispatch_get_main_queue(), ^{

                // do somethings

            });

        }

        else if ([call.callState isEqualToString:CTCallStateIncoming]) {// Call is incoming

            NSLog(@"电话 --- 待接通");

        }

        else if ([call.callState isEqualToString:CTCallStateDialing]) {// Call is Dialing

            NSLog(@"电话 --- 拨号中");

            // 通知 H5 当前截屏操作

            dispatch_async(dispatch_get_main_queue(), ^{

                // do somethings

            });

        }

        else {// Nothing is done"

            NSLog(@"电话 --- 无操作");

        }

    };

}

注:若需要对 UI 方面进行调试,需要提前进行主线程的调度,不然会造成 crash.


此次分享到此结束,希望内容能对大家实际有所帮助,有什么不足之处欢迎指点共同进步!

相关文章

网友评论

    本文标题:电话状态监听 - iOS

    本文链接:https://www.haomeiwen.com/subject/minwdftx.html