AVAudioSession 学习

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

AVAudioSession

注意事项

当想重新设置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,播放按钮依然显示为播放状态。

你可能感兴趣的:(AVAudioSession 学习)