AppDelegate を使用して、通知に応答します。
applicationWillResignActiveおよびapplicationDidBecomeActive
メイン ルーチンでは、上記の呼び出しがそれぞれsaveAudioStateとrestoreAudioStateをトリガーします。これらは AudioPlayer の状態を取得し、中断から戻ったときに再開します。これは、電話の割り込みには問題なく機能しますが、ホームボタンを押した場合には機能しません.
ホーム ボタンの場合、currentTime と currentAudioItem の値は無効です。
- (void) saveAudioState {
currentAudioItem = musicPlayer.nowPlayingItem;
currentTime = musicPlayer.currentPlaybackTime;
NSLog(@"Playback state %d", musicPlayer.playbackState);
NSLog(@"Time %f", currentTime);
NSLog(@"Track %@", currentAudioItem);
audioWasPlaying = NO;
if (musicPlayer.playbackState == MPMusicPlaybackStatePlaying) {
audioWasPlaying = YES;
[musicPlayer pause];
}
}
- (void) restoreAudioState {
// Restore the now-playing item and its current playback time.
musicPlayer.nowPlayingItem = currentAudioItem;
musicPlayer.currentPlaybackTime = currentTime;
// If the music player was playing, get it playing again.
if (audioWasPlaying && currentAudioItem) {
[musicPlayer play];
}
}
これは iOS のバグなのか、それとも物事が壊れてしまった結果なのか?
iOS 5.1 および 5.1.1 でテストしました。