Swift3.0拨打电话,获取通话状态(接通,挂断...)<CoreTelephony,CallKit.CXCallObserver>

iOS 同时被 3 个专栏收录
132 篇文章 0 订阅
57 篇文章 0 订阅
41 篇文章 9 订阅

iOS10 之前

头文件:
import CoreTelephony

声明一个全局的属性:
let callCenter = CTCallCenter()

//拨号
let number = "10086"
let callWebView = UIWebView()
callWebView.loadRequest(URLRequest(url:URL(string: "tel:\(number)")!))
view.addSubview(callWebView)
UIApplication.shared.open(URL(string:number)!, options: ["":""], completionHandler: nil)

//获取通话状态
callCenter.callEventHandler =  { (call: CTCall) -> Void in
    if call.callState == CTCallStateDisconnected {
        print("电话挂断")
    }
    if call.callState == CTCallStateConnected {
        print("电话接通")
    }
    if call.callState == CTCallStateIncoming {
        print("通话途中收到别的来电")
    }
    if call.callState == CTCallStateDialing {
        print("电话播出")
    }
}

iOS10

头文件:
import CallKit.CXCallObserver

声明全局属性<必须的,不然代理无法监听>
let callObserver = CXCallObserver()

//拨号
let number = "10086"
let callWebView = UIWebView()
callWebView.loadRequest(URLRequest(url:URL(string: "tel:\(number)")!))
view.addSubview(callWebView)
UIApplication.shared.open(URL(string:number)!, options: ["":""], completionHandler: nil)

设置代理
callObserver.setDelegate(self, queue: DispatchQueue.main)

实现代理方法:
extension ViewController: CXCallObserverDelegate {
    func callObserver(_ callObserver: CXCallObserver, callChanged call: CXCall) {

        if call.isOutgoing {

            print("电话播出")

            if call.hasConnected {
                print("电话接通")
                operation(state: CurrentState.HasConnected)
            }
            if call.hasEnded {
                print("电话挂断")
                operation(state: CurrentState.HasEnded)
            }
            if call.isOnHold {
                print("无人接听挂断")
                operation(state: CurrentState.IsOnHold)
            }
        } else {
            print("other error")
        }
    }
}

DEMO地址(基于Swift3.0的一个循环拨打电话的小功能的,直到接通为止)

  • 2
    点赞
  • 1
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值