锁定屏幕上的AVAudioPlayer

Nee*_*eku 7 avaudioplayer ios avaudiosession background-audio mpnowplayinginfocenter

我使用AVAudioPlayer(不是AVPlayer)实现了一个音频播放器.我可以使用以下方法处理远程控制事件.它的工作原理相当好的,到目前为止,但是我看到两个以上subtypes这些事件:UIEventSubtypeRemoteControlEndSeekingForwardUIEventSubtypeRemoteControlEndSeekingBackward.

- (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.
        }

}
Run Code Online (Sandbox Code Playgroud)

所以问题:

  1. 为了使事情正常,我是否应该实施这两种子类型?

  2. 此方法仅使rewind,play/pausefast forward锁定屏幕上的按钮,但它不显示文件标题,艺术作品,和持续时间.如何使用AVAudioPlayer或显示该信息AVAudioSession(我真的不想再使用一个库/ API来实现)?

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

Pat*_*ley 10

你是对的,MPNowPlayingInfoCenter是唯一的方法.所以继续和链接MediaPlayer.framework.在处理播放曲目的类中,导入<MediaPlayer/MediaPlayer.h>.每当您的曲目更改时,请执行以下操作:

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

    [MPNowPlayingInfoCenter defaultCenter].nowPlayingInfo = info;
Run Code Online (Sandbox Code Playgroud)