zoukankan      html  css  js  c++  java
  • 电话状态监听

    今天接到一个监听状态的需求,当使用 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.

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

  • 相关阅读:
    源码浅析:MySQL一条insert操作,会写哪些文件?包括UNDO相关的文件吗?
    20201024 --各位码农,节日快乐
    Redis的基本使用
    Oracle 11g与12c的审计详解
    Mac 终端 Tomcat 环境配置过程
    Oracle查询如何才能行转列?-sunziren
    Redis命令大全
    MySQL8.0数据库基础教程(二)-理解&quot;关系&quot;
    mysql 5.7.28 中GROUP BY报错问题 SELECT list is not in GROUP BY clause and contains no
    Flink知识散点
  • 原文地址:https://www.cnblogs.com/survivorsfyh/p/9204958.html
Copyright © 2011-2022 走看看