当我尝试使用systemMusicPlayer播放原始99美分DRM歌曲之一时,currentPlaybackTime未初始化为零。尽管如此,这首歌从一开始就开始了。在这种情况下,除非在播放此DRM歌曲时发生第二次异常,否则我不在乎是否存在这种差异。这种异常现象是即使没有来电,我也会收到音频系统中断(AVAudioSessionInterruptionTypeBegan)。所以我一直试图想出一个修复来忽略中断,以便音乐能够播放。我的kludgey修复是检查currentPlaybackTime。如果它接近于零,则必须是此DRM异常。所以,我有两个问题不利于我。
我发现了StackOverflow上currentPlaybackTime的第一个问题的另一个问题,但它似乎并没有始终如一地工作。
以下是我正在使用的代码:
[self setMusicPlayer: [MPMusicPlayerController systemMusicPlayer]];
[musicPlayer setQueueWithQuery: songToPlayNext];
musicPlayer.currentPlaybackTime = 0.0;
[musicPlayer play];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0ul);
dispatch_async(queue, ^{
while(true) {
if (musicPlayer.currentPlaybackTime != 0.0) {
musicPlayer.currentPlaybackTime = 0.0;
break;
}
}
NSLog(@"In Media Controller: musicplayer (%@) time finally set to zero. time=%f", musicPlayer, musicPlayer.currentPlaybackTime);
[musicPlayer play];
});
当这段代码执行时,它将突破while(true)循环,但是当NSLog语句触发时,currentPlaybackTime通常不为零。
关于强制currentPlaybackTime为零或防止传入呼叫中断发生的替代方法的任何建议?