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

这篇具有很好参考价值的文章主要介绍了Swift 技术 监听电话中断,音乐(用于恢复播放音乐)(源码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

相关文章

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

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

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

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

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

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

前言

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

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

正题

方法 - interruptionNotification(可行)

Swift-(通知-interruptionNotification)电话挂断恢复音乐播放-代码实例

前提条件是AppDelegate必须设置下面的内容才会监听到通知

let session = AVAudioSession.sharedInstance()
do {
    try session.setActive(true)
    try session.setCategory(AVAudioSession.Category.playback)
} catch {
    print(error)
}
// 检测中断音乐通知
NotificationCenter.default.addObserver(self, selector: #selector(interruptionNotification(notification:)), name: AVAudioSession.interruptionNotification, object: nil)

// 检测中断音乐通知
@objc func interruptionNotification(notification:Notification) {
    //false 中断结束    true 中断开始
    if let interruptionTypeValue = notification.userInfo?[AVAudioSessionInterruptionTypeKey] as? UInt,
       let interruptionType = AVAudioSession.InterruptionType(rawValue: interruptionTypeValue) {
        if interruptionType == .began {
            // 暂停音频设备
            AliPlayerManger.default.pause()
        } else if interruptionType == .ended {
            // 恢复音频设备
            AliPlayerManger.default.play()
        }
    }
}

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

方法 - CallKit(禁用)

框架在中国禁用了, 2020.10.31上线被拒,更换CoreTelephony框架又提了一版

Swift-电话挂断恢复音乐播放-代码实例

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()
            }
        }
    }
}

Swift 技术 监听电话中断,音乐(用于恢复播放音乐)(源码)
Swift 技术 监听电话中断,音乐(用于恢复播放音乐)(源码)
Swift 技术 监听电话中断,音乐(用于恢复播放音乐)(源码)
Swift 技术 监听电话中断,音乐(用于恢复播放音乐)(源码)文章来源地址https://www.toymoban.com/news/detail-433998.html

到了这里,关于Swift 技术 监听电话中断,音乐(用于恢复播放音乐)(源码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity 3D通过脚本控制音频音量、继续、暂停、停止播放;判断当前音乐是否播放;切换音乐;

    演示 在HideInInspector中将三首音乐拖到音乐组中,自定义音乐数量也可以,需要修改代码中切换音乐函数中的部分内容。调用脚本中的函数即可实现对应功能。 重复播放音乐代码如下

    2024年02月12日
    浏览(59)
  • 项目7-音乐播放器2(上传音乐+查询音乐+拦截器)

    之后就不用对用户是否登录进行判断了 生效 请求: { post, /music/upload {singer,MultipartFile file}, } 响应: { \\\"status\\\": 0, \\\"message\\\": \\\"上传成功!\\\", \\\"data\\\": true } Java如何判断一个文件是否为真实的MP3文件_判断一个文件是否是mp3 文件-CSDN博客 流程:前端进行相关的文件操作-再将上传的文

    2024年04月17日
    浏览(48)
  • 提升群辉AudioStation音乐体验,实现公网音乐播放

    很多老铁想在上班路上听点喜欢的歌或者相声解解闷儿,于是打开手机上的某雅软件和某音乐软件点进去一看: 奈何目前移动端的娱乐软件广告很烦人,不知不觉就会点进去而且不好退出,甚至开了会员还要看广告,各种营销词汇让老铁们破了财又不能消灾,那怎么解决这个

    2024年02月08日
    浏览(46)
  • 网易云音乐开发--音乐播放暂停切换上下首功能实现

     问题就是我们点击播放,暂停之后,再次播放,它会多次发起请求。而我们现在对它的优化是,不需要重复的发起请求 这里我们通过把musicLink改为形参的方式,如果有给它传入参数,没有链接那么就让它发起请求,如果有那就继续走下去。而且我们将musicLink保存到data中 

    2024年02月06日
    浏览(42)
  • uniapp小程序背景音乐自动播放、播放、暂停

    在做小程序的时候时常会用到背景音乐,对于背景音乐的使用有刚进入页面时会自动播放背景音乐,不想听点击暂停按钮,播放暂停,点击播放按钮,音乐播放 1、在html中添加两张图片:播放和暂停,v-show来动态切换图片显示,并绑定点击事件,实现手动暂停和播放音乐 2、

    2024年02月11日
    浏览(49)
  • Python爬虫网易云音乐,Tkinter制作音乐播放器

    目录 一、效果展示 二、环境 三、实现过程 四、源码 页面的美化以及功能还有待升级~ 先来说一下已有功能吧: 可以在搜索框中通过歌曲或歌手名称进行搜索,效果和在网易云官网搜索一样。 点击开始下载,就会将搜索结果的第一条歌曲下载到指定文件夹 下载完毕后,会遍

    2024年02月04日
    浏览(52)
  • .Net开发的音频分离桌面应用,可用于提取背景音乐

    背景音乐对于视频来说是非常重要的,制作视频的人来说,听到一些符合自己视频的背景音乐,又找不到背景音乐的源音乐,这时候就需要有软件帮助提取背景音乐了。 这是基于C#开发的UI界面,支持中文等多国语言、支持分离人声背景音乐的桌面软件,可用于提取背景音乐

    2024年02月03日
    浏览(42)
  • Flutter音乐播放audioplayers

    Flutter的audioplayers是一个Flutter插件,可以播放多个同时的音频文件,支持Android、iOS、Linux、macOS、Windows和web平台。它有以下特点: 可以从本地文件、网络资源或内存中加载音频 可以控制音量、进度、速度和循环 可以播放多个音频同时,或者使用单例模式 可以监听播放状态和

    2024年02月04日
    浏览(50)
  • 利用蜂鸣器播放音乐

            我们知道,蜂鸣器可分为有源蜂鸣器和无源蜂鸣器,有源蜂鸣器内置了频率发生电路,因此其通电就能够发出声音,但是其频率是固定的,而无源蜂鸣器内部没有频率发生电路,需要外界给予频率,因此适用于单片机控制使其发出不同的音调频率。在这一点有源蜂

    2024年02月12日
    浏览(51)
  • 开源音乐播放器!

    导读 音乐是生活的一部分。维基百科关于音乐发展历史的文章有这样一段不错的描述说:“全世界所有的人们,包括哪怕是最孤立、与世隔绝的部落,都会有自己的特色音乐……”好吧,我们开源人就构成了一个部落。我建议我们的“音乐形式”应该包括开源音乐播放器。

    2024年02月08日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包