7

我从 -play 开始AVAudioPlayer,然后像这样设置 nowPlaying 字典:

NSMutableDictionary *songInfo = [[NSMutableDictionary alloc] init];
        
MPMediaItemArtwork *albumArt = [[MPMediaItemArtwork alloc] initWithImage: [UIImage imagedNamed:@"AlbumArt"]];
[songInfo setObject:@"Audio Title" forKey:MPMediaItemPropertyTitle];
[songInfo setObject:@"Audio Author" forKey:MPMediaItemPropertyArtist];
[songInfo setObject:@"Audio Album" forKey:MPMediaItemPropertyAlbumTitle];
[songInfo setObject:albumArt forKey:MPMediaItemPropertyArtwork];
[[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:songInfo];

锁定屏幕始终显示暂停按钮。我正确接收了远程控制事件,并且可以通过远程控制事件切换播放/暂停,但即使在播放时,锁定屏幕也会一直显示“暂停”。

现在我看到了 MPMoviePlayerController 的这项工作。有人可以解释 MPNowPlayingInfoCenter 如何确定它应该显示播放还是暂停按钮?

4

3 回答 3

1

你设置正确AVAudioSessionCategoryAudioSession吗?我必须AVAudioSessionCategoryPlayback相信它才能发挥作用。

于 2013-12-03T15:13:17.497 回答
0

MPNowPlaying目前没有使用,但显然我必须这样做,才能在锁定屏幕上显示音频信息。

但是,除了@user3061915 所说的,为了管理play/pause按钮,我已经使用UIEventTypeRemoteControl它并且它非常适合控制play/pause按钮:

- (void)remoteControlReceivedWithEvent:(UIEvent *)event {
    //if it is a remote control event handle it correctly
    if (event.type == UIEventTypeRemoteControl)
    {
        if (event.subtype == UIEventSubtypeRemoteControlPlay)
        {
            [self playAudio];
        }
        else if (event.subtype == UIEventSubtypeRemoteControlPause)
        {
            [self pauseAudio];
        }
        else if (event.subtype == UIEventSubtypeRemoteControlTogglePlayPause)
        {
            [self togglePlayPause]; //This method will handle the toggling.
        }
    }
于 2013-12-03T21:53:02.353 回答
0

我刚刚在我自己的应用程序中解决了这样的问题。我最初使用 [[AVAudioSession sharedInstance] setCategory:withOptions:error:] 并提供了 AVAudioSessionCategoryOptionMixWithOthers 和 AVAudioSessionCategoryOptionDuckOthers。这原来是我的问题。如果您与其他人设置混音,您将不会获得远程控制事件。他们仍然使用 iPod 应用程序。如果你设置了其他人,你会得到远程控制事件,但它似乎会导致你描述的问题:播放/暂停按钮显示错误的东西。我不确定为什么。我通过将选项设置为 0 或实际上只是调用 setCategory:error: 来获得播放/暂停按钮的行为。

于 2014-09-21T22:27:10.810 回答