AVAudioSession
image.png作用
- 配置音频会话类别和模式,以与系统交流您打算如何在应用中使用音频的方式
- 激活应用程序的音频会话以使类别和模式配置生效
- 订阅并响应重要的音频会话通知,例如音频中断和路由更改
- 执行高级音频设备配置,例如设置采样率,I / O缓冲区持续时间和通道数
通知
音频中断
AVAudioSessionInterruptionNotification
AVAudioSessionInterruptionTypeKey
// 系统中断了您的音频会话
AVAudioSessionInterruptionTypeBegan = 1,
// 中断已经结束
AVAudioSessionInterruptionTypeEnded = 0,
音频通道改变
AVAudioSessionRouteChangeNotification
AVAudioSessionRouteChangeReasonKey
// 原因不明。
AVAudioSessionRouteChangeReasonUnknown = 0,
// 有新设备可用(例如已插入耳机)
AVAudioSessionRouteChangeReasonNewDeviceAvailable = 1,
// 旧设备不可用(例如拔下了耳机)。
AVAudioSessionRouteChangeReasonOldDeviceUnavailable = 2,
// 音频类别已更改(例如,AVAudioSessionCategoryPlayback已更改为AVAudioSessionCategoryPlayAndRecord)。
AVAudioSessionRouteChangeReasonCategoryChange = 3,
// 路由已被覆盖(例如,类别为AVAudioSessionCategoryPlayAndRecord,输出为已从默认的接收器更改为扬声器)。
AVAudioSessionRouteChangeReasonOverride = 4,
// 设备从睡眠中醒来。
AVAudioSessionRouteChangeReasonWakeFromSleep = 6,
// 当前类别没有路由时返回(例如,类别AVAudioSessionCategoryRecord但没有可用的输入设备)。
AVAudioSessionRouteChangeReasonNoSuitableRouteForCategory = 7,
// 表示输入和/或输出端口的集合没有更改,但是它们的某些方面配置已更改。 例如,端口的选定数据源已更改。
AVAudioSessionRouteChangeReasonRouteConfigurationChange = 8
注意事项
当想重新设置AudioSession的CategoryOptions的时候,需要把categoryoptions恢复到默认值0,在设置新的Categoryoptions 例如:
从mixable模式切换到non-mixable模式:
// 1. mixable
[[AVAudioSession sharedInstance]setCategory:AVAudioSessionCategoryPlayback withOptions: AVAudioSessionCategoryOptionMixWithOthers error:nil];
// 2. options
[[AVAudioSession sharedInstance]setCategory:AVAudioSessionCategoryPlayback withOptions:0 error:nil];
// 3. non-mixable
[[AVAudioSession sharedInstance]setCategory:AVAudioSessionCategoryPlayback withOptions: AVAudioSessionCategoryOptionAllowBluetooth error:nil];
[[AVAudioSession sharedInstance]setActive:YES error:nil];
当APP正在播放内容,设置 active 为NO([AVAudioSession sharedInstancesetActive:NO error:nil];
),会立即停止当前的音乐播放。
锁屏界面上的播放按钮状态,是根据整个APP的播放情况来显示的,如果APP一直在播放音频,即使你设置
MPNowPlayingInfoPropertyPlaybackRate
为0,播放按钮依然显示为播放状态。
网友评论