之前做的app需求后臺播放音樂,并且音樂需要持續播放下去,做這個的時候碰到幾個坑:
1、app進入后臺后音樂播放一段時間后就不再播放了。這時候手機上滑的欄目中也不是當前播放的app,如下圖所示:
解決的方法:播放音頻之前先要設置AVAudioSession模式,通常只用來播放的App可以設為AVAudioSessionCategoryPlayback即可;
2、音樂播放完當前的歌曲后,不再繼續往下播放下一首歌曲
解決方法:在ViewController中的viewWillAppear、viewDidLoad或者applicationDidEnterBackground等地方監聽遠程控制事件,對應的在viewWillDisappear、applicationDidBecomeActive等地方結束遠程控制事件。
```
- (void) viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];
}
- (void) viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
[UIApplication sharedApplication] endReceivingRemoteControlEvents];
[self resignFirstResponder];
}
監聽了這遠程控制后,則需要在ApplicationDelegate中實現遠程控制的事件
- (void)remoteControlReceivedWithEvent:(UIEvent*)receivedEvent {
if(receivedEvent.type==UIEventTypeRemoteControl) {
switch(receivedEvent.subtype) {
caseUIEventSubtypeRemoteControlPlay:
caseUIEventSubtypeRemoteControlPause:
caseUIEventSubtypeRemoteControlTogglePlayPause:
[self.playerControllerplayOrStop];
break;
caseUIEventSubtypeRemoteControlPreviousTrack:
[self.playerControllerskipToPreviousItem];
break;
caseUIEventSubtypeRemoteControlNextTrack:
[self.playerControllerskipToNextItem];
break;
default:
break;
}
}
```
3、評論看到有兄弟問到電話打斷后怎么恢復音樂播放,這里補充一下。另外大家有不懂的或者好的建議都可以在評論上添加,互相學習。
首先初始化AVAudiosession 的時候就添加一個通知監聽 ,
AVAudioSession * audioSession = [AVAudioSession sharedInstance];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleInterruption:)
name:AVAudioSessionInterruptionNotification
object:audioSession]; ?//監聽來電等事件打斷音樂播放,此廣播是系統發出的,監聽即可
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleRouteChange:)
name:AVAudioSessionRouteChangeNotification
object:audioSession];//監聽音頻輸出變化事件,插拔耳機、連接藍牙等事件,此廣播是系統發出的,監聽即可
接下來就是實現監聽觸發的方法了