后台或者锁屏播放音乐播放,
引入依赖的库文件:
AudioToolBox.framework
MediaPlayer.framework
CoreMedia.framework
AVFoundation.framework
2. 在工程的AppDelegate.m文件的didFinishLaunchingWithOptions方法中加入如下代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//这种方式后台,可以连续播放非网络请求歌曲。遇到网络请求歌曲就废,需要后台申请task
/*
* AudioSessionInitialize用于处理中断处理,
* AVAudioSession主要调用setCategory和setActive方法来进行设置,
* AVAudioSessionCategoryPlayback一般用于支持后台播放
*/
AVAudioSession *session = [AVAudioSession sharedInstance];
NSError *setCategoryError = nil;
[session setCategory:AVAudioSessionCategoryPlayback error:&setCategoryError];
NSError *activationError = nil;
[session setActive:YES error:&activationError];
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
}
3. 播放本地歌曲,不多说,代码如下:
-(IBAction)doPlay:(id)sender{
NSString *filepath = [[NSBundle mainBundle] pathForResource:@"qhc" ofType:@"caf"];
BOOL fileexit = [[NSFileManager defaultManager] fileExistsAtPath:filepath];
if (fileexit) {
if (_player && [_player isPlaying]) {
return;
}
[_player release];
_player = nil;
_player = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL URLWithString:filepath] error:nil];
[_player play];
}
}
经过上面简单的处理后,已经可以在后台播放歌曲了。但是使用过qq,酷狗的播放器后,就会发现一个很炫的功能,就是在锁屏的状态下,可以调用播放器,并切换歌曲,而且还可以显示歌曲对应的图片。
之前没搞过播放器,一直不理解实现原理,百度了很多次,使用的关键字为ios播放器,百度总是找给我一批垃圾资料。
后来同事帮忙找了份资料,然后我换歌关键字,终于找到我需要的资料了,现在也自己整理下。
iOS播放器特效,锁屏状态下显示专辑图片和信息
1. 检查你的AppDelegate是不是继承于UIResponder,有的是自动生成,有的人习惯手写,如果是继承于NSObject请改为 AppDelegate : UIResponder。
2. 设置锁屏状态下音乐播放的信息(歌曲信息和图片)
//设置锁屏状态,显示的歌曲信息
-(void)configNowPlayingInfoCenter{
if (NSClassFromString(@"MPNowPlayingInfoCenter")) {
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"name" forKey:MPMediaItemPropertyTitle];
[dict setObject:@"singer" forKey:MPMediaItemPropertyArtist];
[dict setObject:@"album" forKey:MPMediaItemPropertyAlbumTitle];
UIImage *image = [UIImage imageNamed:@"test.jpg"];
MPMediaItemArtwork *artwork = [[MPMediaItemArtwork alloc] initWithImage:image];
[dict setObject:artwork forKey:MPMediaItemPropertyArtwork];
[[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:dict];
}
}
上面的if (NSClassFromString(@"MPNowPlayingInfoCenter"))语句,说是为了避免了版本兼容问题。
这个API貌似只出现在5里面。现在你可以发现,上面的代码可能不起作用,而且待机屏的播放暂停也不会起作用。
3. 在对应的页面加入控制语句。
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
//Once the view has loaded then we can register to begin recieving controls and we can become the first responder
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];
[self configNowPlayingInfoCenter];
}
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
//End recieving events
[[UIApplication sharedApplication] endReceivingRemoteControlEvents];
[self resignFirstResponder];
}
本人是在单一的viewcontroller里面的调试的,所以如上面的语句添加。也可以自行调整位置.
完成以上的方法后,是不是觉得程序也没做什么调整处理嘛,运行上面的代码,会发现只有信息出来,但是播放控制还是不起作用。
4. 重写控制方法.
-(BOOL)canBecomeFirstResponder{
return YES;
}
5. 加上控制逻辑的监听
-(void)remoteControlReceivedWithEvent:(UIEvent *)event{
//if it is a remote control event handle it correctly
if (event.type == UIEventTypeRemoteControl) {
switch (event.subtype) {
case UIEventSubtypeRemoteControlTogglePlayPause:
{
NSLog(@"UIEventSubtypeRemoteControlTogglePlayPause...");
[self pauseOrPlay];
break;
}
case UIEventSubtypeRemoteControlPlay:
{
NSLog(@"UIEventSubtypeRemoteControlPlay...");
break;
}
case UIEventSubtypeRemoteControlPause:
{
NSLog(@"UIEventSubtypeRemoteControlPause...");
break;
}
case UIEventSubtypeRemoteControlStop:
{
NSLog(@"UIEventSubtypeRemoteControlStop...");
break;
}
case UIEventSubtypeRemoteControlNextTrack:
{
NSLog(@"UIEventSubtypeRemoteControlNextTrack...");
break;
}
case UIEventSubtypeRemoteControlPreviousTrack:
{
NSLog(@"UIEventSubtypeRemoteControlPreviousTrack...");
break;
}
default:
break;
}
}
后台或者锁屏播放音乐播放,相关推荐
- android 锁屏显示音乐播放器,Android锁屏界面控制音乐播放
目前,在锁屏界面控制音乐播放有两种常用方式. 第一种方式:原生Android系统及自带音乐播放器. 锁屏界面端: 原生Android中,锁屏界面相关的UI由KeyguardHostView提供,Key ...
- iOS音乐后台播放、锁屏封面及播放控制
在默认情况下App被切换到后台时,音乐的就停止播放了,但音乐类App的一般都会需要在后台继续播放,这样用户就可以一边听音乐,一边操作其他的App.对于这种情况我们可以对App做一些简单的配置,实现后台 ...
- iOS锁屏界面音频播放控制
公司的app里面有后台音频播放功能,最近发现,当在锁屏界面(后台)时,不能控制播放页面的音频播放,是因为没有实现远程控制事件处理. 下面说说大概实现过程:由于后台播放功能早已实现(不做详细叙述),这里 ...
- android 带记忆功能的播放器源码,【全开源可二开】带后台管理面板的在线音乐播放器Android应用APP源码...
这是一款带后台管理面板的在线音乐播放器Android应用APP源码,可让您更快地构建在线和离线android音频播放器,代码全开源适合二次开发.该源码自带2个紫色和橙色主题(允许您添加更多主题),多语 ...
- iOS 语音合成支持后台和锁屏情况
最近有一个需求,就是要加入语音合成,并能够在进入后台或者锁屏之后能够播报,现在最流行的应该就是科大讯飞了,功能强大,用起来简单,但是如果只要简单的TTS功能就没有必要集成其他的SDK了,iOS中提供好 ...
- ios开发之MPNowPlayingInfoCenter 锁屏显示正在播放的音乐
今天在床上玩唱吧,听着歌锁屏了,当点亮屏幕的时候,锁屏页面出现了我正在听得歌曲 壁纸也换成了唱吧里面的歌手图片.做ios好几年了,从没有做过这个需求 于是好奇就翻看ios的API文档找到了这个类. 如 ...
- Java爬虫后台+微信小程序之音乐播放器(上)
微信小程序–音乐播放器(Java爬虫后台在下文篇章公布) 主页面: wxml: css就不展示了,比较多 <view class='container' style='width:{{wid}} ...
- iOS 关于音乐锁屏控制音乐(锁屏信息设置)
appDelegate里面加入如下代码获取后台播放权限 - (void)setAudioBackstagePlay{AVAudioSession *audioSession = [AVAudioSes ...
- Android 原生锁屏页面音乐控制
Android5.0 提出了全新的MediaSession概念用于播放器与控制器之间进行交互,它取代之前的RemoteControlClient,并提供了更为灵活的客户端受控端模型. 但是MediaS ...
最新文章
- scrapy (2)下载图片及存储信息
- Excel直接转图片
- session和cookie的应用场景和区别
- Webservice入门教程_编写天气预报的webservice
- 20个强大的jQuery翻书插件【 jQuery flipbook】
- Codeforces Round #470 (rated, Div. 2, based on VK Cup 2018 Round 1)B. Primal Sport
- [jQuery] 判断复选框checkbox是否选中checked
- EasyMock 简介
- 第45届国际大学生程序设计竞赛(ICPC)银川站太原理工大学收获4枚奖牌
- 《一切皆是映射:代码的本质》哈希算法 (Hash)
- 【第40题】2019年OCP认证12C题库062考试最新考试原题
- 2017-2018-1 20155322 20155327 实验一 开发环境的熟悉
- Oracle10g expdp impdp
- selenium的三种等待方式
- 上海移动视频客户端 for 8910
- moviepy音视频开发:audio_fadein、fadeout实现声音淡入淡出
- VMware中性能分配的问题
- 青春使命网页制作html,青春使命句子
- 身份证过期补办,派出所会打电话通知吗?
- 神奇智能搜索引擎:perplexity智能搜索引擎(ChatGPT与Edge合体——联网版chatGPT)
热门文章
- 基于原生js和css3实现barrage弹幕效果
- 在玩的时候服务器停机维护,结果进不了游戏,会被封号吗?,“吃鸡”停服当日,游戏里出现5个“提示”,看到第4个时被封号!...
- 基于AT89C52和DS18B20的空调温度精准控制系统
- 美年旅游_套餐管理_新增套餐
- 王者服务器维护杨戬,王者荣耀杨戬加强 王者荣耀2021年3月19日体验服英雄调整内容...
- 中台真的好可以解决一切问题?
- WPF 实现TextBox背景中提示文字(水印效果)
- 用python画猪_用Python画一只丑丑的猪头
- 项目总结:电子签名功能-对接第三方平台-01-名词定义了解
- 抽取文件夹中所有图片