iOS后台播放

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS后台播放相关的知识,希望对你有一定的参考价值。

### 音乐后台播放
* 1.当程序进入后台的时候,开启后台任务

    ```
    - (void)applicationDidEnterBackground:(UIApplication *) {
        // 开启后台任务
        [application beginBackgroundTaskWithExpirationHandler:nil];
    }
    ```
* 2.在项目的Targets页面,设置Capabilities,BackgroundModes选择第一项,`Audio, AirPlay and Picture in Picture`

* 3.设置Audiosession会话

    ```
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // 1.拿到AVAudioSession会话
        AVAudioSession *session = [AVAudioSession sharedInstance];
        // 2.设置类型
        [session setCategory:AVAudioSessionCategoryPlayback error:nil];
        // 3.激活
        [session setActive:YES error:nil];
        
        return YES;
    }
    ```
    
### 显示锁屏信息
* 1.当开始播放的时候,开启锁屏信息,抽取一个方法

    ```
    [self updateLockInfo];
    ```
* 2.导入`MediaPlayer/MediaPlayer.h`框架,在播放信息中心设置信息

    ```
    - (void)updateLockInfo {
        // 获取播放信息中心
        MPNowPlayingInfoCenter *center = [MPNowPlayingInfoCenter defaultCenter];
        // 创建信息字典
        NSMutableDictionary *infos = [NSMutableDictionary dictionary];
        // 设置信息内容
        infos[MPMediaItemPropertyAlbumTitle] = self.playingMusic.name;
        infos[MPMediaItemPropertyAlbumArtist] = self.playingMusic.singer;
        infos[MPMediaItemPropertyArtwork] = [[MPMediaItemArtwork alloc] initWithImage:[UIImage imageNamed:self.playingMusic.icon]];
        infos[MPMediaItemPropertyPlaybackDuration] = @(self.player.duration);
        infos[MPNowPlayingInfoPropertyElapsedPlaybackTime] = @(self.player.currentTime);
        // 根据字典设置播放中心
        [center setNowPlayingInfo:infos];
        
        // 开启远程事件
        [[UIApplication sharedApplication]  beginReceivingRemoteControlEvents];
        // 让当前控制器成为第一响应者
        [self becomeFirstResponder];
    }
    ```
* 3.控制器默认不能成为第一响应者,需要实现以下方法

    ```
    - (BOOL)canBecomeFirstResponder {
        return YES;
    }
    ```
* 4.监听远程事件

    ```
    - (void)remoteControlReceiveWithEvent:(UIEvent *)event {
        switch (event.subtype) {
            // 当点击播放或者暂停按钮的时候
           case UIEventSubtypeRemoteControlPlay:
            case UIEventSubtypeRemoteControlPause:
                [self playOrPauseButtonClick];
                break;
          // 当点击下一首按钮的时候
          case UIEventSubtypeRemoteControlNextTrack:
              [self nextButtonClick];
                break;
          // 当点击上一首按钮的时候
          case UIEventSubtypeRemoteControlPreviousTrack:
                [self previousButtonClick];
               break;
            default:
                break;
    }
    ```

 

以上是关于iOS后台播放的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 4 中在后台播放多个音频文件?

在 IOS 中,如何乱序播放音频片段的一部分?

iOS开发简单的实现后台任务(诸如后台播放音乐,定时器,后台定位等)

AVQueuePlayer 在 iOS5 后台播放多个音轨

ios开发视频播放后台下载功能实现 :1,ios播放视频 ,包含基于AVPlayer播放器,2,实现下载,iOS后台下载(多任务同时下载,单任务下载,下载进度,下载百分比,文件大小,下载状态)(真机调

当替换片段视频仍在android中播放背景时