一、项目需要两种后台任务:下载和播放音频。所以使用了audio play的model来注册后台播放。
同时需要使用代码初始化AVAudioSession:
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setActive:YES error:nil];
[session setCategory:AVAudioSessionCategoryPlayback error:nil];
二、在app 的state处于background时,需要相应音量键的方法,于是采用
AudioSessionAddPropertyListener来添加kAudioSessionProperty_CurrentHardwareOutputVolume的callback,达到响应音量改变的事件。
至此还未发现有AVAudioSession和AudioSession两个类。
IOS8开始,AudioSession的一些API就失效了,比如上面使用的AudioSessionAddPropertyListener。
查看文档才看到AudioSessionAddPropertyListener是属于AudioSession的方法。
关于AVAudioSession和AudioSession的却别和用法,参考区别和用法。
三、因为AudioSessionAddPropertyListener已经deprecate,所以在AVAudioSession中寻找办法。
AVAudioSession提供了一系列NotificationName,但是我没有找到关于音量变化的。
看文档发现了一个属性 @property(readonly) float outputVolume ,突然想到可以使用KVO来监听volume的变化,不就间接实现了音量键的回调了吗?
添加监听者--实现协议方法--最终实现音量回调。
-
具体KVO实现就不赘述。
-