1.现象描述

最近做的一款app有异常报警功能,使用的音频后台驻行模式AVAudioSessionCategoryPlayback,当有异常时发出相应的警报声,此时手机如果有来电进入,此时app仍然有报警声,同时伴随电话铃声。

2.解决方案

继续查找资料,最终找到CoreTelephony框架,这个框架包含了电话相关的API,可以实现监测来电,查看运营商信息等功能。下面就是具体的实现监测来电的代码

倒入框架:

@import CoreTelephony;

声明变量:

@property (nonatomic,strong) CTCallCenter *center;

在viewDidLoad中实现相关功能:

center = [[CTCallCenter alloc] init];

__weak typeof(self) weakSelf = self;

center.callEventHandler = ^(CTCall * call) {

if ([call.callState isEqualToString:CTCallStateIncoming])

{

//电话振铃过程中的事件处理

[weakSelf.audioPlayer pause];//电话进来时暂停播放器

[CommonFunction setisPlayVioce:NO];

NSLog(@"CTCallStateIncoming");

}else if ([call.callState isEqualToString:CTCallStateDisconnected])

{

//电话挂断后的事件处理

NSLog(@"CTCallStateDisconnected");

[weakSelf.audioPlayer play];//电话结束时恢复警告播放

[CommonFunction setisPlayVioce:YES];

}else if ([call.callState isEqualToString:CTCallStateDialing])

{

//打电话出去的状态(回铃音)事件处理

NSLog(@"CTCallStateDialing");

}else if ([call.callState isEqualToString:CTCallStateConnected])

{

//电话接通状态事件处理

NSLog(@"CTCallStateConnected");

}

};

3.相关音频模式梳理

AVAudioSessionCategory相关
AVAudioSessionCategoryAmbient
使用这个category的应用会随着静音键和屏幕关闭而静音。并且不会中止其它应用播放声音,可以和其它自带应用如iPod,safari等同时播放声音。注意:该Category无法在后台播放声音,所以开启应用打断音乐程序播放音乐应该使用这个Category。
AVAudioSessionCategorySoloAmbient
类似于AVAudioSessionCategoryAmbient 不同之处在于它会中止其它应用播放声音。 这个category为默认category。该Category无法在后台播放声音
AVAudioSessionCategoryPlayback 
使用这个category的应用不会随着静音键和屏幕关闭而静音。可在后台播放声音
AVAudioSessionCategoryRecord 
用于需要录音的应用,设置该category后,除了来电铃声,闹钟或日历提醒之外的其它系统声音都不会被播放。该Category只提供单纯录音功能。
AVAudioSessionCategoryPlayAndRecord 
用于既需要播放声音又需要录音的应用,语音聊天应用(如微信)应该使用这个category。该Category提供录音和播放功能。如果你的应用需要用到iPhone上的听筒,该category是你唯一的选择,在该Category下声音的默认出口为听筒(在没有外接设备的情况下)。
AVAudioSessionCategoryOptions中的AVAudioSessionCategoryOptionMixWithOthers
设置这个选项在激活会话时不会打断其他应用程序的音频播放,在以下的选项中可用AVAudioSessionCategoryPlayback 、 AVAudioSessionCategoryPlayAndRecord 、 AVAudioSessionCategoryMultiRoute(ios6加入的多线路)
AVAudioSessionCategoryOptionDuckOthers
这个选项在激活会话时降低其他程序的音频播放声音,在以下的选项中可用AVAudioSessionCategoryPlayAndRecord、AVAudioSessionCategoryRecord
主要是体现当前音频的重要性,比如说开车听歌的时候,导航的声音就属于比较重要的或者是需要特别关注的就可以是用这个选项
AVAudioSessionCategoryOptionAllowBluetooth
允许可免提蓝牙设备可使用输入通道
AVAudioSessionCategoryOptionDefaultToSpeaker
设置这个选项在没有其他通道的时候默认选择内置扬声器
AVAudioSessionCategoryOptionInterruptSpokenAudioAndMixWIthOthers(iOS9.0加入的)
当你的app偶尔的使用音频播放(感觉和DuckOthers很像,文档中提到这两个是可以互换的)在以下的选项中可用AVAudioSessionCategoryPlayback 、 AVAudioSessionCategoryPlayAndRecord 、 AVAudioSessionCategoryMultiRoute
如果设置了这个选项,在关闭这个session时需要:
[myAudioSession setActive: NO with Options: AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error: <#Your error object, or nil for testing#>];

这句代码是为了确保执行当前session之前被打断的正在播放的 audio app能都收到resume消息。

ios应用音频与来电铃声冲突问题相关推荐

  1. 苹果手机来电归属地_苹果手机来电铃声、充电音还能这么有趣?这款神器也太炫了...

    当身处公交.地铁等公共场所时,听到iPhone熟悉的来电铃声,不少iPhone用户都会下意识地拿出手机确认是否有来电,然而真实情况往往是别人的手机来电.由于ios系统的限制,iPhone本身并不提供个 ...

  2. 将迷你音箱用作手机来电铃声放大器

    注:图片来自各产品介绍页面 要看结论,跳至最后 前两天买了个带音频线的"jrc迷你小音响",让父母出去时插在手机耳机孔上,作为来电铃声放大器,这样他们就再也不会因为手机放在包里而总 ...

  3. Android设置来电铃声和分享操作

    之前项目里写的设置来电铃声和分享音频文件如下: //设置来电铃声public void setAsRingTone(String path) {Log.d(TAG, "setAsRingTo ...

  4. Anddroid IM来电铃声通过耳机播放

    针对问题:使用云信IM, 带耳机时,来电铃声还是会外放 本文主要内容 1.如何通过耳机播放来电铃声 2.如果来电铃声播放之前,耳机播放音乐,如何解决铃声和音乐同时播放的问题 问题一: 首先云信IM来电 ...

  5. 有多少人知道微信来电铃声可以跟更换?

    随着微信功能的逐渐全面,很多人已经将微信作为主要的社交平台.当然除了正常的社交以外,它还具备其他的重要功能. 当我们想要联系某个人的时候,想到的首要通讯工具就是微信.微信已经逐渐从社交平台发展为通讯工 ...

  6. ym——Android从零开始(28)(来电铃声的设置、手机闹钟、手势识别)(新)

    转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持! 来电铃声的设置.手机闹钟.手势识别来电铃声的设置 MediaStore简介 Media ...

  7. 如何编写程序设置Android来电铃声

    转自:http://www.jizhuomi.com/android/example/360.html 我们在拿到新手机后通常会为其设置来年铃声,那么怎样通过代码来设置Android来电铃声,本文就为 ...

  8. iOS 9音频应用播放音频之iOS 9音频播放进度

    iOS 9音频应用播放音频之iOS 9音频播放进度 iOS 9音频应用开发播放进度 音频文件在播放后经过了多久以及还有多久才可以播放完毕,想必是用户所关注的问题.为了解决这一问题,在很多的音乐播放器中 ...

  9. iOS 9音频应用播放音频之控制播放速度

    iOS 9音频应用播放音频之控制播放速度 iOS 9音频控制播放速度 iOS9音频文件在播放时是以一定的速度进行的.这个速度是可以进行更改的,从而实现iOS9音频文件的快速播放和慢速播放功能.要实现i ...

  10. iOS 9音频应用播放音频之音量设置与声道设置

    iOS 9音频应用播放音频之音量设置与声道设置 iOS 9音频应用音量设置 音量又称响度.音强,是指人耳对所听到的声音大小强弱的主观感受,其客观评价尺度是声音的振幅大小.在iOS 9音频应用的应用中, ...

最新文章

  1. 从零开始用Python实现k近邻算法(附代码、数据集)
  2. 一篇文章教会你创建vue项目和使用vue.js实现数据增删改查
  3. c语言自动按键脚本,C语言键盘控制走迷宫小游戏
  4. view 背景透明
  5. 前端学习(573):margin无效情形table无效
  6. 【HDU - 5988】Coding Contest(网络流费用流,改模板)
  7. ER图( 实体联系图)
  8. Win7双屏显示设置
  9. 【javascript】基于javascript的小时钟
  10. SQL 高效运行注意事项(一)
  11. AIDA64内存与缓存测试过了算稳定吗_高频内存能带来怎样的不同!影驰HOF OC Lab Master DDR4 4000内存评测...
  12. JavaScript函数(二)回调函数
  13. 神华集团世界500强酷站欣赏
  14. java 定义类私有类_关于java:为什么不能将一个类定义为protected?
  15. 学计算机的考研考教育学好考吗,2011年考研心路:我的两年教育学考研总结
  16. python列表用来有序存放一组_python 列表 元组(自兴人工智能)
  17. android nfc扇区加密,uniapp安卓NFC MifareClassic读IC卡加密扇区方法
  18. sql server 获取本机的ip地址
  19. Java爬虫,爬取竞彩网数据并按指定格式输出到excel表格中
  20. 爬虫小试-将某网站内的试题爬取出来并保存到本地word

热门文章

  1. 淘宝关键词API接口
  2. 使用 yarn 安装 marked
  3. Android uni app原生插件页面全屏Activity的键盘档住输入框或弹起键盘跳动问题
  4. AI三驾马车之深度学习框架
  5. 批处理遍历当前目录和子目录查找指定后缀名的文件并修改后缀名
  6. 机器学习中向量函数的求导问题
  7. 香橙派装ubuntu系统
  8. 数据库与开源编译器框架LLVM
  9. Nature:细菌增长和扩张的平衡机制
  10. 财会法规与职业道德【3】