使用模擬器時(shí),切換到后臺,是可以繼續(xù)播放的,但是真機(jī)運(yùn)行的話,就會停止,所以需要對播放器進(jìn)行后臺播放處理
1.設(shè)置后臺模式
后臺模式.png
2.設(shè)置音頻會話
設(shè)置音頻會話只需要設(shè)置一次就可以了,因?yàn)橐纛l播放封裝了一個(gè)單例工具類,創(chuàng)建單例時(shí)調(diào)用了alloc]init]方法,所以設(shè)置類型這里就寫在了init初始方法里
- (instancetype)init{
self = [super init];
if (self) {
// 后臺運(yùn)行音樂 需要設(shè)置音頻會話的類型
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;
}
這兩步設(shè)置完成后,就可以實(shí)現(xiàn)后臺播放了
但還存在一個(gè)問題,當(dāng)歌曲后臺快要播放完時(shí),能夠后臺切換歌曲,但是切換歌曲后不會自動(dòng)播放,需要我們設(shè)置線控
設(shè)置線控后不僅可以后臺自動(dòng)切歌播放,還可以用耳機(jī)上的線控操作
// 開啟遠(yuǎn)程控制器后,才會自動(dòng)切歌
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
完整的后臺處理部分代碼:
- (instancetype)init{
self = [super init];
if (self) {
// 后臺運(yùn)行音樂 需要設(shè)置音頻會話的類型
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];
// 開啟遠(yuǎn)程控制器后,才會后臺自動(dòng)切歌播放(開啟線控,還能支持耳機(jī)上的線控操作)
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
}
return self;
}