锁屏状态下的AVAudioPlayer

7

我使用了AVAudioPlayer(而不是AVPlayer)来实现音频播放器。我可以使用以下方法处理远程控制事件。目前它运行得很好,但是我还看到这些事件的两个更多的subtypesUIEventSubtypeRemoteControlEndSeekingForwardUIEventSubtypeRemoteControlEndSeekingBackward

- (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];
        }
        else if (event.subtype == UIEventSubtypeRemoteControlBeginSeekingBackward)
        {
            [self rewindTheAudio]; //this method rewinds the audio by 15 seconds.
        }
        else if (event.subtype == UIEventSubtypeRemoteControlBeginSeekingForward)
        {
            [self fastForwardTheAudio]; //this method fast-forwards the audio by 15 seconds.
        }

}

所以问题是:

  1. 为了让事情正常工作,我是否应该也实现那两种子类型?

  2. 这种方法只能在锁定屏幕上启用 倒带播放/暂停快进 按钮,但它没有显示文件标题、艺术品和持续时间。如何使用 AVAudioPlayerAVAudioSession 显示这些信息(我真的不想再实现另一个库/API)?

    2-a. 我在搜索时发现了 MPNowPlayingInfoCenter,我对它不太了解。我是否必须使用它来实现上述内容?:-[


这个 down vote 是为了什么,确切地说? - Neeku
1个回答

11

你是正确的,MPNowPlayingInfoCenter 是唯一能做到这件事的途径。所以继续并链接 MediaPlayer.framework。在处理播放音轨的类中,导入 <MediaPlayer/MediaPlayer.h>。每当你的音轨改变时,执行以下操作:

NSDictionary *info = @{ MPMediaItemPropertyArtist: artistName,
                            MPMediaItemPropertyAlbumTitle: albumName,
                            MPMediaItemPropertyTitle: songName };

    [MPNowPlayingInfoCenter defaultCenter].nowPlayingInfo = info;

谢谢Patrick;但是第一个问题呢?他们也必须被实现吗? - Neeku

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接