写在开头
最近做了IOS音频、音乐后台播放相关的需求,这里主要总结一下支持后台播放以及远程控制的一些用法,在这个过程中也遇到了一些问题,会在另一个博客里面进行总结。
一、后台权限申请
1、在Info.plist文件中里设置选项Required background modes ,然后添加item0:App plays audio or streams audio/video using AirPlay
2、设置Capabilities -> Background Modes -> 勾选 Audio,AirPlay,and Picture in Picture
3、在AppDelegate.m中添加代码
- (void)applicationWillResignActive:(UIApplication *)application {
// *让app接受远程事件控制,及锁屏是控制版会出现播放按钮
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
// *后台播放代码
AVAudioSession*session=[AVAudioSession sharedInstance];
[session setActive:YES error:nil];
[session setCategory:AVAudioSessionCategoryPlayback error:nil];
}
二、添加控制代码
我们在这里使用MPRemoteCommandCenter添加远程控制代码,使用MPNowPlayingInfoCenter更新通知中心控制台的媒体信息。
关于这个两个控件的使用,可以在网上查询一些教程,我这里做简单的介绍,并添加一下使用过程中需要的注意事项
1、MPRemoteCommandCenter
(1)是一个响应系统外部附件(耳机)以及系统控件发出的运程控制事件对象。
(2)在使用的过程中,不可以多次调用(最好只调用一次,主要是addTarget不能多次调用),因为调用多次以后,会多次响应远程事件
- (void)setupLockScreenControlInfo {
MPRemoteCommandCenter *commandCenter = [MPRemoteCommandCenter sharedCommandCenter];
// 锁屏播放
MPRemoteCommand *playCommand = commandCenter.playCommand;
playCommand.enabled = YES;
[playCommand addTargetWithHandler:^MPRemoteCommandHandlerStatus(MPRemoteCommandEvent * _Nonnull event) {
NSLog(@"锁屏暂停后点击播放");
if (!self.isPlaying) {
[self playMusic];
}
return MPRemoteCommandHandlerStatusSuccess;
}];
// 锁屏暂停
MPRemoteCommand *pauseCommand = commandCenter.playCommand;
pauseCommand.enabled = YES;
[pauseCommand addTargetWithHandler:^MPRemoteCommandHandlerStatus(MPRemoteCommandEvent *