[iOS]iOS AudioSession详解 Category选择 听筒扬声器切换
iOS- 关于AVAudioSession的使用——后台播放音乐
ios原声音频播放AVAudioSession 总结
•AVAudioSessionCategoryAmbient
–混音播放,例如雨声、汽车引擎等,可与其他音乐一起播放
•AVAudioSessionCategorySoloAmbient
–后台播放,其他音乐将被停止
•AVAudioSessionCategoryPlayback
–独占音乐播放
•AVAudioSessionCategoryRecord
–录制音频
•AVAudioSessionCategoryPlayAndRecord
–播放和录制音频
•AVAudioSessionCategoryAudioProcessing
–使用硬件解码器处理音频,该音频会话使用期间,不能播放或录音
步骤一:在AppDelegate中application:didFinishLaunchingWithOptions:方法设置
//后台播放音频设置
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setActive:YES error:nil];//激活音频会话。
/*
AVAudioSessionCategoryPlayback 或 kAudioSessionCategory_MediaPlayback
——用于以语音为主的应用,使用这个category的应用不会随着静音键和屏幕关闭而静音。
如果不写这句,锁屏时,会暂停播放。
*/
[session setCategory:AVAudioSessionCategoryPlayback error:nil];
//注意:在这里写锁屏音乐的封面等信息也可以,不过是不是太麻烦了,所以在播放VC中设置就可以了。
步骤二:在播放的界面添加锁屏信息即可
//音乐锁屏信息展示(这里的信息应该后台返回,与URL对应。)
- (void)setupLockScreenInfo
{
//歌词获取为空。
// AVAsset *asset = self.player.currentItem.asset;
// NSLog(@"lyrics===%@",asset.lyrics);
// 1.获取锁屏中心
MPNowPlayingInfoCenter *playingInfoCenter = [MPNowPlayingInfoCenter defaultCenter];
//初始化一个存放音乐信息的字典
NSMutableDictionary *playingInfoDict = [NSMutableDictionary dictionary];
// 2、设置歌曲名
[playingInfoDict setObject:@"未知歌曲" forKey:MPMediaItemPropertyAlbumTitle];
// 设置歌手名
[playingInfoDict setObject:@"张卫健" forKey:MPMediaItemPropertyArtist];
// 3设置封面的图片
UIImage *image = [UIImage imageNamed:@"1.jpg"];
if (image) {
MPMediaItemArtwork *artwork = [[MPMediaItemArtwork alloc] initWithImage:image];
[playingInfoDict setObject:artwork forKey:MPMediaItemPropertyArtwork];
}
// 4设置歌曲的总时长
[playingInfoDict setObject:@"100" forKey:MPMediaItemPropertyPlaybackDuration];
//音乐信息赋值给获取锁屏中心的nowPlayingInfo属性
playingInfoCenter.nowPlayingInfo = playingInfoDict;
// 5.开启远程交互
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
}
//监听远程交互方法
- (void)remoteControlReceivedWithEvent:(UIEvent *)event
{
switch (event.subtype) {
//播放
case UIEventSubtypeRemoteControlPlay:{
[self.player play];
}
break;
//停止
case UIEventSubtypeRemoteControlPause:{
[self.player pause];
}
break;
//下一首
case UIEventSubtypeRemoteControlNextTrack:
[self clickNextSongBtn:nil];
break;
//上一首
case UIEventSubtypeRemoteControlPreviousTrack:
[self clickLastSongBtn:nil];
break;
default:
break;
}
}