您现在的位置是:首页 >学无止境 >Swift 技术 监听电话中断,音乐(用于恢复播放音乐)(源码)网站首页学无止境

Swift 技术 监听电话中断,音乐(用于恢复播放音乐)(源码)

冯汉栩 2023-07-13 16:00:02
简介Swift 技术 监听电话中断,音乐(用于恢复播放音乐)(源码)

一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络,希望未来技术之巅上有你们也有我。

相关文章

Swift 技术 音频,音乐(AVAudioSession设置,音乐中断)

Swift 技术 监听电话中断,音乐(用于恢复播放音乐)(源码)

Swift 第三方 播放器AliyunPlayer(阿里云播放器)(源码)

Swift 需求 音乐播放暂停淡出淡放(声音逐渐消失)(视频)(源码)

OC 技术 DOUAudioStreamer音乐播放器的使用(源码)

Swift 基础 AVPlayer音乐播放器的使用(源码)

前言

今天做音乐播放起的需求需要开发接打电话的需求,正在播放音乐的时候,当电话来的,我们需要停止播放音乐,然后当挂断电话之后就恢复音乐的播放,或者拨打电话出去之后就停止音乐的播放,然后当挂断电话之后就恢复音乐的播放.

1.app在前台听音乐时,电话打进来会停止播放音乐,电话挂断之后恢复播放
2.app在后台听音乐时,电话打进来会停止播放音乐,电话挂断之后恢复播放
3.app在后台听音乐时,主动拨打电话,会停止播放音乐,电话挂断之后恢复播放

正题

方法 - CallKit

1.本app播放音乐过程中,突然有电话进入停止播放音乐,拨打电话接听后停止播放音乐,挂断之后恢复播放.

代码写在Appdeledate

import CallKit

///属性记录电话 打来中断
private let callObserver = CXCallObserver()

/// 是否电话拦截垄断
private var callPhoneOutGoing = false

callObserver.setDelegate(self, queue: nil)

extension ViewController: CXCallObserverDelegate {
    func callObserver(_ callObserver: CXCallObserver, callChanged call: CXCall) {
        if !call.isOutgoing && !call.isOnHold && !call.hasConnected && !call.hasEnded {// 暂停播放
            //print("来电")
            if playerState == true {
                playerState = false
                callPhoneOutGoing = true
                player.pause()
            }
        } else if !call.isOutgoing && !call.isOnHold && !call.hasConnected && call.hasEnded {// 开始播放
            //print("来电-挂掉(未接通)")
            if playerState == false && callPhoneOutGoing == true {
                playerState = true
                callPhoneOutGoing = false
                player.play()
            }
        } else if !call.isOutgoing && !call.isOnHold && call.hasConnected && !call.hasEnded {// 暂停播放
            //print("来电-接通")
            if playerState == true {
                playerState = false
                callPhoneOutGoing = true
                player.pause()
            }
        } else if !call.isOutgoing && !call.isOnHold && call.hasConnected && call.hasEnded {// 开始播放
            //print("来电-接通-挂掉")
            if playerState == false && callPhoneOutGoing == true {
                playerState = true
                callPhoneOutGoing = false
                player.play()
            }
        } else if call.isOutgoing && !call.isOnHold && !call.hasConnected && !call.hasEnded {// 暂停播放
            //print("拨打")
            if playerState == true {
                playerState = false
                callPhoneOutGoing = true
                player.pause()
            }
        } else if call.isOutgoing && !call.isOnHold && !call.hasConnected && call.hasEnded {// 开始播放
            //print("拨打-挂掉(未接通)")
            if playerState == false && callPhoneOutGoing == true {
                playerState = true
                callPhoneOutGoing = false
                player.play()
            }
        } else if call.isOutgoing && !call.isOnHold && call.hasConnected && !call.hasEnded {// 暂停播放
            //print("拨打-接通")
            if playerState == true {
                playerState = false
                callPhoneOutGoing = true
                player.pause()
            }
        } else if call.isOutgoing && !call.isOnHold && call.hasConnected && call.hasEnded {// 开始播放
            //print("拨打-接通-挂掉")
            if playerState == false && callPhoneOutGoing == true {
                playerState = true
                callPhoneOutGoing = false
                player.play()
            }
        }
    }
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

方法 - interruptionNotification

// 检测中断音乐通知
NotificationCenter.default.addObserver(self, selector: #selector(interruptionNotification(notifi:)), name: AVAudioSession.interruptionNotification, object: nil)

// 检测中断音乐通知
@objc func interruptionNotification(notifi:Notification) {
//false 中断结束    true 中断开始
//print("Key: (notifi.userInfo?["AVAudioSessionInterruptionTypeKey"] as? Bool)")

let suspend = notifi.userInfo?["AVAudioSessionInterruptionTypeKey"] as? Bool ?? false
print("suspend: (suspend)")
}

在这里插入图片描述

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。