iOS音频的后台播放 锁屏
初始化AudioSession和基本配置
音频播放器采用的AVPlayer ,在程序启动的时候需要配置AudioSession,AudioSession负责应用音频的设置,比如支不支持后台,打断等等,这一步很重要,比如在viewdidload里初始化AVplayer以后要调用下面的函数:
/** 设置音频会话 */ //这种方式后台,可以连续播放非网络请求歌曲,遇到网络请求歌曲就废,需要后台申请task
-(void)setAudioSession{
AVAudioSession *audioSession=[AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayback error:nil];
[audioSession setActive:YES error:nil];
}
除了代码的初始化,很重要的一步是对info-plist的设置,让应用支持音频的后台播放
库的引入包括:
AudioToolBox.framework
MediaPlayer.framework
CoreMedia.framework
AVFoundation.framework
Remote控制
在播放视图的ViewController里加上这两个函数:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[[UIApplication sharedApplication] endReceivingRemoteControlEvents];
[self resignFirstResponder];
}
当然也可以同理放到delegate.m里面的进入后台和回到前台的函数中,否则的话,上面的代码只是允许当前视图的情况下进入后台可以Remote控制
在AppDelegate里要申请后台任务来进行处理
- (void)applicationDidEnterBackground:(UIApplication *)application {
[application beginReceivingRemoteControlEvents];
}在添加远程控制代码:
-(void)remoteControlReceivedWithEvent:(UIEvent *)event{
//if it is a remote control event handle it correctly
if (event.type == UIEventTypeRemoteControl) {
if (event.subtype == UIEventSubtypeRemoteControlPlay) {
[self playBarSelector:self.mPlayButton];
}if (event.subtype == UIEventSubtypeRemoteControlPause) {
[self playBarSelector:self.mPlayButton];
} else if (event.subtype == UIEventSubtypeRemoteControlNextTrack){
[self playBarSelector:self.mNextButton];
[self configNowPlayingInfoCenter];
}else if (event.subtype == UIEventSubtypeRemoteControlPreviousTrack){
[self playBarSelector:self.mUpwardButton];
[self configNowPlayingInfoCenter];
}
}
}
最后切换上一首和下一首要更新锁屏信息,重新调一下configNowPlayingInfoCenter方法
- (void)configNowPlayingInfoCenter {
if (NSClassFromString(@"MPNowPlayingInfoCenter")) {
// 1.播放信息中心
MPNowPlayingInfoCenter *center = [MPNowPlayingInfoCenter defaultCenter];
// 2.初始化播放信息
NSMutableDictionary *info = [NSMutableDictionary dictionary];
// 专辑名称
info[MPMediaItemPropertyAlbumTitle] = self.operatorObject.mExerciseText;
// 歌手
info[MPMediaItemPropertyArtist] = @"雅思听听小组";
// 歌曲名称
info[MPMediaItemPropertyTitle] = [NSString stringWithFormat:@"%@ - %@", self.operatorObject.mTextName, [self.operatorObject.mTitle substringToIndex:9]];
// 设置图片
info[MPMediaItemPropertyArtwork] = [[MPMediaItemArtwork alloc] initWithImage:[UIImage imageNamed:@"Default"]];
// 设置持续时间(歌曲的总时间)
info[MPMediaItemPropertyPlaybackDuration] = @(self.mAudioPlayerLong);
// 设置当前播放进度
info[MPNowPlayingInfoPropertyElapsedPlaybackTime] = @(self.mPlayerCurrentTime);
// 3.切换播放信息
center.nowPlayingInfo = info;
}
}
转载于:https://www.cnblogs.com/Milo-CTO/p/4446919.html
iOS音频的后台播放 锁屏相关推荐
- iOS音频的后台播放总结(后台网络请求歌曲,Remote控制,锁屏封面,各种打断)...
iOS音频的后台播放总结(后台网络请求歌曲,Remote控制,锁屏封面,各种打断) 2013-12-11 21:13 1416人阅读 评论(0) 收藏 举报 分类: cocoa SDK(139) ...
- iOS 语音合成支持后台和锁屏情况
最近有一个需求,就是要加入语音合成,并能够在进入后台或者锁屏之后能够播报,现在最流行的应该就是科大讯飞了,功能强大,用起来简单,但是如果只要简单的TTS功能就没有必要集成其他的SDK了,iOS中提供好 ...
- iOS音频的后台播放总结
在没有网络的情况下,音频的后台播放比较简单,google一下可以搜到很多资料,但是如果每次歌曲的请求都是通过网络,就不成了,有时可以也扛不了几首,这里总结下实现方法,可以实现像电台一样的功能,后台播放 ...
- iOS从零开始学习直播之音频2.后台播放和在线播放
本篇主要讲音频的后台播放和在线播放. 后台播放 上一篇写的工程运行之后程序退至后台,发现运行不了,歌停止了,这显然不行,音乐后台播放是标配啊.今天就来讲一下后台播放. 1.在plist文件里,告诉 ...
- 后台或者锁屏播放音乐播放,
引入依赖的库文件: AudioToolBox.framework MediaPlayer.framework CoreMedia.framework AVFoundation.framework 2. ...
- 当自己视频APP,遇到别人音频APP后台播放音频时候
当别家音乐APP播放音乐,打开自家视频APP(虽然没有播放视频),但音乐app的音频却暂停了(如果是钉钉语音会议这种情况,会自动退出语音会议). 查了资料:这是音频打断处理问题,举个例子: ...
- Android App后台、锁屏运行,百度定位不实时定位。未解问题,求大神指教?
细节描述: 功能需要实现:App 一直给后台上传经纬度.(正常运行,后台运行,锁屏运行) 问题描述:红米Note 5A. 在A点,App 锁屏,走到B 点,然而在A---B之间一直上传的是A点锁屏前的 ...
- iOS 音频录制、播放(本地、网络)
文章目录一.录音机(AVAudioRecorder)1.简介2.如何使用3.具体实现(开始.暂停.停止.播放 四个功能)4.附件实现demo二.播放音频1.播放本地音频文件(AVAudioPlayer ...
- iOS音频开发(录音+播放+剪辑+合成+压缩转码)
录音: //音频会话 AVAudioSession *session = [AVAudioSession sharedInstance]; NSError *sessionError; /* AVAu ...
最新文章
- 助力视障人士,微软等公司捐赠首批AI有声内容
- 「AI初识境」深度学习模型中的Normalization,你懂了多少?
- python需要php吗-做网站用php还是python
- python实现名片管理系统在哪里_python实现名片管理系统项目
- python123温度转换-python二级备考 day2
- Android Studio 环境搭建参考,jdk10javac命令提示不是内部或外部命令
- Java校招面试经验汇总,最终入职阿里
- python 批量增加文件前缀_用python批量提取视频中的音频文件
- 【caffe-windows】 caffe-master 之图片转换成lmdb or leveldb
- 父类构造函数与子类构造函数的关系
- 记录:mysql 字符串拼接函数
- 计算机操作系统知识点总结(有这一篇就够了!!!)
- 张晓龙2018微信公开课
- “VBE6EXT.OLB不能被加载”解决方法
- java16 新特性
- c语言设计温控系统,基于单片机的智能温控系统的设计与实现
- 如果编写 if 时不带 else
- Python的面向对象,魔术方法、类的三大特征、自省、实例空间、经典类与新式类
- Mac安装Tmux的一次纪录
- 计算机应用高级课程,Rsoft软件高级课程