2

我有一个简单的音乐播放器应用程序,它遇到了一个非常奇怪的问题。首先,在播放音乐并处于锁定状态时,我允许用户双击 Home 按钮并使用锁定的 iPod 音乐控件。但是,我确实注意到,在锁定状态下,我的应用程序没有收到任何已注册的通知。在大多数情况下,无论如何这都很好。但是,如果用户在锁定状态下播放音乐至少 15 分钟(我不知道为什么,但不会出现这个问题),并使用某种耳机或辅助插孔,然后拔下当设备仍在播放音乐时,iPodMusicPlayer 将自动暂停耳机/辅助插孔。这正是我想要它做的,但是在这发生之后,当用户解锁他们的设备并再次将焦点放在应用程序上时,iPodMusicPlayer'

- (IBAction)playPause:(id)sender {
     if ([musicPlayer playbackState] == MPMusicPlaybackStatePlaying) {
         [musicPlayer pause];    
     } else {
         [musicPlayer play];
     }
 }

哪里musicPlayer = [MPMusicPlayerController iPodMusicPlayer]

在正常情况下,这运行得非常好。但是在这些条件之后,我的断点将在音乐暂停时达到 MPMusicPlaybackStatePlaying 的条件,反之亦然。我能够解决此问题的唯一方法是选择新的音乐或终止应用程序并重新打开。我已经尝试了大量的解决方法来以编程方式解决这个问题,但没有任何结果是 100% 无错误的修复。有没有人知道为什么会发生这种情况?

4

4 回答 4

3

您也可以尝试以下解决方法:

 - (IBAction)playPause:(id)sender {
      if ([musicPlayer playbackState] == MPMusicPlaybackStatePlaying) {
          [musicPlayer play];    
          [musicPlayer pause];    
      } else {
          [musicPlayer pause];
          [musicPlayer play];
      }
  }
于 2012-04-26T22:45:40.530 回答
1

我遇到了同样的问题,实际上我找到了更多解决问题的方法,最有效的方法是将应用程序置于后台,然后从 ipod 播放器中快速多次使用播放/暂停按钮。在 50% 的情况下,状态不同步。我也尝试了很多解决方法,但没有办法让我的应用程序正常工作。我认为 iOS 框架中存在错误,因为文档没有任何变化。

我为这个案例找到了一个解决方法,这里有详细说明:Other StackOverflow question

于 2012-04-12T17:24:50.023 回答
0

这个问题在 iOS 8 中仍然存在。我尝试了@matbur 建议的方法,它工作了一段时间,但在某个时候停止工作。所以我通过自己跟踪状态绕过了整个问题:

- (void)viewDidLoad {
    self.isMusicPlaying = NO;
}

- (void)pauseAllSound {
    self.isMusicPlaying = NO;
    [self.musicController pause];
}

- (void)playAllSound {
    self.isMusicPlaying = YES;
    [self.musicController play];
}
于 2014-10-23T17:04:52.437 回答
0

我这边也有同样的问题。似乎将播放调用放在运行循环的队列中解决了这个问题(至少在我的上下文中)。你可以试试这行代码:

[musicPlayer performSelector:@selector(play) withObject:nil afterDelay:0];
于 2012-07-05T16:32:15.497 回答