swift 技术 监听电话中断

news2024/9/24 19:15:39

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

前言

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

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/488233.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

做好FP独立站有6大要点,注意!

跨境电商做FP独立站已经见怪不怪了,但要注意哪些要点才能做好一个成功的FP独立站呢,今天就跟大家聊一聊。 做好FP独立站有6个要点 1.选品 独立站运营选择产品的方向往往是抓住非主流、新奇等特征。不推荐在成熟平台上销售受欢迎的普通商品,…

Elasticsearch详解

文章目录 概览使用与ES交互索引创建索引查询索引删除文档创建修改文档局部修改文档查询文档删除全查询 整合SpringBootpom依赖application.ymlElasticsearchAutoConfigurationElasticsearchPropertiesElasticsearchConstantPersonSearchPageHelperPersonServiceBaseElasticsear…

zabbix 使用自定义命令做监控项

环境:Linux zabbix6 问题:某个监控项的值为linux终端的shell命令输出,需要做一个zabbix自定义监控项 解决办法:参考官方文档使用userparameters方法 背景:我需要监控Linux某个文件夹的文件数量,并设置阈值…

详解c++---stack和dequeue的介绍

目录标题 stack介绍stack的定义stack的数据插入stack中数据的个数stack数据删除stack中数据的查看判断stack对象是否为空stack对象的数据交换queue的介绍queue的定义queue的数据插入frontbackqueue的元素个数queue中元素的删除emptyqueue的数据交换 stack介绍 首先stack是一个…

windows kafka mq 安装和使用介绍 及踩坑记录 及集群架构kafka实现架构 各自运行机制 一次性看明白

目录 介绍 安装集群 简单介绍按照步骤 zookeeper 安装 kafka安装 基础配置3个节点 在配置三个启动bat 重点 常见问题 内存不够配置文件中增加如下 java.io.IOException: Map failed 基础使用 创建主题 查看创建 生产者 消费者 应用场景 kafka一些原理和特点 …

让自动化测试秒杀繁琐操作?试试PO模式设计框架

目录:导读 引言 po模式 优势: 目录解释: 页面对象设计模式: base基础层: page对象层: test:测试层 data数据层: common层: untils: config层: run层:…

救生衣、划船背心、救生圈、U 形救生圈和投掷式浮垫等个人漂浮设备 (PFD)UL报告标准要求

个人漂浮设备 (PFD) 个人漂浮设备 (PFD) 是帮助人们在水中保持漂浮状态的装备。个人漂浮设备是一个范围较大的商品分类,其中包括救生衣、划船背心、救生圈、U 形救生圈和投掷式浮垫 救生衣 救生衣是一种在使用者正确穿戴时可为其提供支持的服装或设备,由…

Redis【性能 01】Redis 5.x 6.x 7.x 共5个不同版本延迟及性能测试对比分析(单机版默认配置)

延迟及性能测试比对分析过程 1.环境说明2.测试结果Version 5.0.3【待优化版本】Version 5.0.7【云服务器使用的版本】Version 5.0.14【5.x最终版】Version 6.2.12【6.x最终版】Version 7.2-rc1【当前最新的发布候选版】 3.汇总分析3.1 延迟测试结果汇总3.1 性能测试结果汇总 4.…

今天 国际青年节 “International Youth Day “

《劝学》孟郊 击石乃有火,不击元无烟。 人学始知道,不学非自然。 万事须己运,他得非我贤。 青春须早为,岂能长少年。 Strike stones to make it burn; No smoke unless you strike. Youre crude if you dont learn; And you…

Syncthing文件同步 - 免费搭建开源的文件自动同步服务器并公网远程访问【私人云盘】

文章目录 1. 前言2. Syncthing网站搭建2.1 Syncthing下载和安装2.2 Syncthing网页测试2.3 注册安装cpolar内网穿透 3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 在数据爆炸的当下,每天都会产生海量的数据,这些…

SQL注入攻防入门详解

毕业开始从事winform到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机会接触相关开发……必须的各种借口。这几天把sql注入的相关知识整理了下,希望大家多多提意见。 (对于…

ACIS的拓扑基础数据结构

在ACIS中,拓扑基础数据结构按照从低维到高维的顺序包括: Vertex(顶点):表示空间中的一个点,用于定义点的位置和属性。Edge(边):由两个顶点连接而成,具有方向属性,用于定义直线段和圆弧。Coedge(共面边):表示面的边缘,也就是一条边可以被多个面共享。Coedge有两个…

SpringCloud学习(七)——统一网关Gateway

文章目录 1. 网关介绍2. 网关搭建2.1 引入依赖2.2 创建启动类2.3 编写配置2.4 测试 3. 路由断言工厂4. 路由过滤器4.1 过滤器配置4.2 全局过滤器4.3 过滤器执行顺序 5. 跨域问题处理 1. 网关介绍 到现在,我们可以使用Nacos对不同的微服务进行注册并管理配置文件&am…

淘宝天猫公布618整体活动节奏

5月4日消息,淘宝直播618选品会近日在杭州成功举办,淘宝直播商品中心团队和天猫、全球购行业小二在会上与商家、达人主播等参会人士探讨如何选品才能打动消费者、如何保障货品的质量安全、如何完善商品的售后服务等问题,共同分析直播电商行业中…

verilog驱动LCD显示彩条、字符

verilog驱动LCD显示彩条、字符 一、简介 LCD(liquid crystal display):液晶显示器 TFT:薄膜晶体管 LCD屏幕接口:常见的LCD屏幕接口有:RGB、MCU、LVDS、MIPI等 RGB LCD接口原理图:其中MISO、MOSI是IIC接…

Acjudge #P1004. 整除三元组

蒟蒻来讲题,还望大家喜。若哪有问题,大家尽可提! Hello, 大家好哇!本初中生蒟蒻讲解一下Acjudge #P1004. 整除三元组! 原题 题目背景 潍坊高新OI社区打算开讲“数论”了,大家赶紧来学习一下“整除”吧。 题目描述 …

第一章 数字图像本质及基础操作

系列文章目录 第一章 图像本质及基础操作 文章目录 系列文章目录前言一、数字图像的本质二、图像基础理论1.色彩空间1.1 RGB模型1.2 HSV模型1.3 HSL模型1.4 YUV模型1.5 灰度图1.6 OpenCV中色彩空间转换 2.图片的存储3.图像参数 三、图像的基础操作及OpenCV画图1.图像的基础操作…

Hololens2开发指南

练习 - 导入和配置资源 - Training | Microsoft Learn unity需要高版本 用2019.4.30支持平台这没有openxr 用2020.3.36可以,2021版本也可以出现

代码随想录算法训练营第三十天 | 航班问题、二维回溯

回溯法小结 本周小结!(回溯算法系列三) | 代码随想录 (programmercarl.com) 性能分析 子集问题分析: 时间复杂度:O(n 2n),因为每一个元素的状态无外乎取与不取,所以时间复杂度为O(2n)&…

蚁群算法-车辆配载率的路径优化

车辆配送路径优化问题可描述为:某商超配送中心要使用一定数量的车辆对一批货物进行配送服务,要求在不超过车辆的额定载重量和额定容积的条件下,安排这些货物的装载,使得车辆利用率最高。 针对以上问题做出假设: (1) 只…