您现在的位置是:首页 >学无止境 >Swift 技术 监听电话中断,音乐(用于恢复播放音乐)(源码)网站首页学无止境
Swift 技术 监听电话中断,音乐(用于恢复播放音乐)(源码)
简介Swift 技术 监听电话中断,音乐(用于恢复播放音乐)(源码)
一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络,希望未来技术之巅上有你们也有我。
相关文章
Swift 技术 音频,音乐(AVAudioSession设置,音乐中断)
Swift 技术 监听电话中断,音乐(用于恢复播放音乐)(源码)
Swift 第三方 播放器AliyunPlayer(阿里云播放器)(源码)
Swift 需求 音乐播放暂停淡出淡放(声音逐渐消失)(视频)(源码)
OC 技术 DOUAudioStreamer音乐播放器的使用(源码)
前言
今天做音乐播放起的需求需要开发接打电话的需求,正在播放音乐的时候,当电话来的,我们需要停止播放音乐,然后当挂断电话之后就恢复音乐的播放,或者拨打电话出去之后就停止音乐的播放,然后当挂断电话之后就恢复音乐的播放.
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)")
}
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。