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后台播放)