【问题标题】:Why MPMusicPlayerController MPMusicPlayerControllerPlaybackStateDidChangeNotification called twice?为什么 MPMusicPlayerController MPMusicPlayerControllerPlaybackStateDidChangeNotification 调用了两次?
【发布时间】:2015-01-01 08:12:27
【问题描述】:

我正在使用以下代码从设备播放歌曲。我为 MPMusicPlayerController 添加了通知以识别播放器的状态。

 self.musicPlayer = [MPMusicPlayerController iPodMusicPlayer]; 
 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handlePlaybackStateChanged:) name:MPMusicPlayerControllerPlaybackStateDidChangeNotification object:self.musicPlayer]; 
 [self.musicPlayer beginGeneratingPlaybackNotifications]; 
 [self.musicPlayer setRepeatMode: MPMusicRepeatModeNone];

musicplayer 播放歌曲时会调用以下方法两次。

 -(void)handlePlaybackStateChanged :(id )notification

我的问题为什么它被调用了两次?任何帮助将不胜感激。

【问题讨论】:

  • 检查 this 所在的函数没有被调用两次,并尝试记录通知并添加断点以确定它何时被调用。

标签: ios notifications mpmusicplayercontroller


【解决方案1】:

我现在正在尝试解决同样的问题。这是我发现的;当 currentPlaybackRate 为 0(停止)或 1(播放)时调用 handlePlaybackStateChanged。当点击 nextSong 按钮时,它会停止当前歌曲,然后播放下一首歌曲,因此会触发两次。我下面的代码已被清理,它在 Swift 中,但你应该明白我的意思。

func handle_PlaybackStateChanged(){
    println("handle_PlaybackStateChanged")

    if player.currentPlaybackRate == 0{
        println("playbackStatePause0")
    }else{
        println("playbackStatePause1")
    }
}

歌曲之间的输出是

handle_PlaybackStateChanged
playbackStatePause0
handle_PlaybackStateChanged
playbackStatePause1

【讨论】:

    猜你喜欢
    • 2012-12-12
    • 1970-01-01
    • 2013-11-20
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多