使用AudioSession实现音乐后台播放功能:
首先介绍一些AudioSession的基本概念:
使用AudioSession的一些作用就是:确定使用音频类型,是配设备,以及协调音频以及其他功能
那么,要通过AudioSession实现一个后台播放功能我们就要先看看AudioSession的使用方法:
首先是初始化调用方法:
extern OSStatus AudioSessionInitialize(CFRunLoopRef inRunLoop,
CFStringRef inRunLoopMode,
AudioSessionInterruptionListener inInterruptionListener,
void *inClientData);
通过函数要求的参数输入我们可以看到,前两个指定流的线程,一般指定主线程就行,填NULL,第四个上下文数据填当前的self就可以了一般,第三个就是重要的回调函数了:
填写回调函数就可以实现我们需要的功能,所以为了实现我要的功能,我写了以下的回调函数:
static void inInterruptionListener(__unused void * inClientData, UInt32 inInterruptionState) {
[[NSNotificationCenter defaultCenter] postNotificationName:@"InterruptionNotification" object:@(inInterruptionState)];
}
通过一个消息通知进行传递当前中断状态,然后在初始化的时候注册一下观察者:(别忘了最后析构的时候移除)
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleInterruption:) name:@"InterruptionNotification" object:nil];
当然,初始化完成后还需要设置你需要的sessionCategory,以下是audioSession的Category类型:
@enum AudioSession audio categories states
@abstract These are used with as values for the kAudioSessionProperty_AudioCategory property
to indicate the audio category of the AudioSession.
@constant kAudioSessionCategory_AmbientSound
Use this category for background sounds such as rain, car engine noise, etc.
Mixes with other music.
@constant kAudioSessionCategory_SoloAmbientSound
Use this category for background sounds. Other music will stop playing.
@constant kAudioSessionCategory_MediaPlayback
Use this category for music tracks.
@constant kAudioSessionCategory_RecordAudio
Use this category when recording audio.
@constant kAudioSessionCategory_PlayAndRecord
Use this category when recording and playing back audio.
@constant kAudioSessionCategory_AudioProcessing
Use this category when using a hardware codec or signal processor while
not playing or recording audio.
通过设置AudioSessionSetProperty进行参数设置
然后通过AudioSessionSetAtivate将Session激活就行了。