【问题标题】:iPodMusicPlayer playbackState inaccurate after odd conditions奇数条件后 iPodMusicPlayer 播放状态不准确
【发布时间】:2011-12-15 02:51:33
【问题描述】:

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

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

musicPlayer = [MPMusicPlayerController iPodMusicPlayer].

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

【问题讨论】:

    标签: objective-c audio playback ipod mpmusicplayercontroller


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 感谢您的建议,不幸的是,您的解决方法对我的问题没有帮助,但我仍在使用它,因为它确实对您的情况有所帮助。如果苹果曾经回复您的错误报告,请传递他们的回复(或解决方案,如果有的话!)
      【解决方案3】:

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

      [musicPlayer performSelector:@selector(play) withObject:nil afterDelay:0];
      

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2021-12-04
          • 2019-08-29
          • 1970-01-01
          • 2019-12-24
          • 1970-01-01
          • 2021-05-26
          • 1970-01-01
          • 2017-02-25
          • 1970-01-01
          相关资源
          最近更新 更多