音乐播放器-后台处理 - (Obj-C)

使用模拟器时,切换到后台,是可以继续播放的,但是真机运行的话,就会停止,所以需要对播放器进行后台播放处理

1.设置后台模式

音乐播放器-后台处理 - (Obj-C)_第1张图片
后台模式.png

2.设置音频会话

设置音频会话只需要设置一次就可以了,因为音频播放封装了一个单例工具类,创建单例时调用了alloc]init]方法,所以设置类型这里就写在了init初始方法里

- (instancetype)init{
    
    self = [super init];
    if (self) {
        // 后台运行音乐 需要设置音频会话的类型
        AVAudioSession *session =[AVAudioSession sharedInstance];
        /*
         enum {
         kAudioSessionCategory_AmbientSound              = 'ambi',
         kAudioSessionCategory_SoloAmbientSound          = 'solo',
         kAudioSessionCategory_MediaPlayback             = 'medi',  --> 后台播放
         kAudioSessionCategory_RecordAudio               = 'reca',
         kAudioSessionCategory_PlayAndRecord             = 'plar',
         kAudioSessionCategory_AudioProcessing           = 'proc'
         };
         */
        [session setCategory:AVAudioSessionCategoryPlayback error:nil];
        
    }
    return self;
}

这两步设置完成后,就可以实现后台播放了
但还存在一个问题,当歌曲后台快要播放完时,能够后台切换歌曲,但是切换歌曲后不会自动播放,需要我们设置线控
设置线控后不仅可以后台自动切歌播放,还可以用耳机上的线控操作

    // 开启远程控制器后,才会自动切歌
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

完整的后台处理部分代码:

- (instancetype)init{
    
    self = [super init];
    if (self) {
        // 后台运行音乐 需要设置音频会话的类型
        AVAudioSession *session =[AVAudioSession sharedInstance];
        /*
         enum {
         kAudioSessionCategory_AmbientSound              = 'ambi',
         kAudioSessionCategory_SoloAmbientSound          = 'solo',
         kAudioSessionCategory_MediaPlayback             = 'medi',  --> 后台播放
         kAudioSessionCategory_RecordAudio               = 'reca',
         kAudioSessionCategory_PlayAndRecord             = 'plar',
         kAudioSessionCategory_AudioProcessing           = 'proc'
         };
         */
        [session setCategory:AVAudioSessionCategoryPlayback error:nil];
        
        // 开启远程控制器后,才会后台自动切歌播放(开启线控,还能支持耳机上的线控操作)
        [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
        
    }
    return self;
}

你可能感兴趣的:(音乐播放器-后台处理 - (Obj-C))