使用模拟器时,切换到后台,是可以继续播放的,但是真机运行的话,就会停止,所以需要对播放器进行后台播放处理
1.设置后台模式
2.设置音频会话
设置音频会话只需要设置一次就可以了,因为音频播放封装了一个单例工具类,创建单例时调用了alloc]init]方法,所以设置类型这里就写在了init初始方法里
- (instancetype)init{
self = [super init];
if (self) {
// 后台运行音乐 需要设置音频会话的类型
AVAudioSession *session =[AVAudioSession sharedInstance];
/*
enum {
kAudioSessionCategory_AmbientSound = 'ambi',
kAudioSessionCategory_SoloAmbientSound = 'solo',
kAudioSessionCategory_MediaPlayback = 'medi', --> 后台播放
kAudioSessionCategory_RecordAudio = 'reca',
kAudioSessionCategory_PlayAndRecord = 'plar',
kAudioSessionCategory_AudioProcessing = 'proc'
};
*/
[session setCategory:AVAudioSessionCategoryPlayback error:nil];
}
return self;
}
这两步设置完成后,就可以实现后台播放了
但还存在一个问题,当歌曲后台快要播放完时,能够后台切换歌曲,但是切换歌曲后不会自动播放,需要我们设置线控
设置线控后不仅可以后台自动切歌播放,还可以用耳机上的线控操作
// 开启远程控制器后,才会自动切歌
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
完整的后台处理部分代码:
- (instancetype)init{
self = [super init];
if (self) {
// 后台运行音乐 需要设置音频会话的类型
AVAudioSession *session =[AVAudioSession sharedInstance];
/*
enum {
kAudioSessionCategory_AmbientSound = 'ambi',
kAudioSessionCategory_SoloAmbientSound = 'solo',
kAudioSessionCategory_MediaPlayback = 'medi', --> 后台播放
kAudioSessionCategory_RecordAudio = 'reca',
kAudioSessionCategory_PlayAndRecord = 'plar',
kAudioSessionCategory_AudioProcessing = 'proc'
};
*/
[session setCategory:AVAudioSessionCategoryPlayback error:nil];
// 开启远程控制器后,才会后台自动切歌播放(开启线控,还能支持耳机上的线控操作)
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
}
return self;
}