引入依赖的库文件:

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;

}

}

后台或者锁屏播放音乐播放,相关推荐

  1. android 锁屏显示音乐播放器,Android锁屏界面控制音乐播放

    目前,在锁屏界面控制音乐播放有两种常用方式. 第一种方式:原生Android系统及自带音乐播放器. 锁屏界面端: 原生Android中,锁屏界面相关的UI由KeyguardHostView提供,Key ...

  2. iOS音乐后台播放、锁屏封面及播放控制

    在默认情况下App被切换到后台时,音乐的就停止播放了,但音乐类App的一般都会需要在后台继续播放,这样用户就可以一边听音乐,一边操作其他的App.对于这种情况我们可以对App做一些简单的配置,实现后台 ...

  3. iOS锁屏界面音频播放控制

    公司的app里面有后台音频播放功能,最近发现,当在锁屏界面(后台)时,不能控制播放页面的音频播放,是因为没有实现远程控制事件处理. 下面说说大概实现过程:由于后台播放功能早已实现(不做详细叙述),这里 ...

  4. android 带记忆功能的播放器源码,【全开源可二开】带后台管理面板的在线音乐播放器Android应用APP源码...

    这是一款带后台管理面板的在线音乐播放器Android应用APP源码,可让您更快地构建在线和离线android音频播放器,代码全开源适合二次开发.该源码自带2个紫色和橙色主题(允许您添加更多主题),多语 ...

  5. iOS 语音合成支持后台和锁屏情况

    最近有一个需求,就是要加入语音合成,并能够在进入后台或者锁屏之后能够播报,现在最流行的应该就是科大讯飞了,功能强大,用起来简单,但是如果只要简单的TTS功能就没有必要集成其他的SDK了,iOS中提供好 ...

  6. ios开发之MPNowPlayingInfoCenter 锁屏显示正在播放的音乐

    今天在床上玩唱吧,听着歌锁屏了,当点亮屏幕的时候,锁屏页面出现了我正在听得歌曲 壁纸也换成了唱吧里面的歌手图片.做ios好几年了,从没有做过这个需求 于是好奇就翻看ios的API文档找到了这个类. 如 ...

  7. Java爬虫后台+微信小程序之音乐播放器(上)

    微信小程序–音乐播放器(Java爬虫后台在下文篇章公布) 主页面: wxml: css就不展示了,比较多 <view class='container' style='width:{{wid}} ...

  8. iOS 关于音乐锁屏控制音乐(锁屏信息设置)

    appDelegate里面加入如下代码获取后台播放权限 - (void)setAudioBackstagePlay{AVAudioSession *audioSession = [AVAudioSes ...

  9. Android 原生锁屏页面音乐控制

    Android5.0 提出了全新的MediaSession概念用于播放器与控制器之间进行交互,它取代之前的RemoteControlClient,并提供了更为灵活的客户端受控端模型. 但是MediaS ...

最新文章

  1. scrapy (2)下载图片及存储信息
  2. Excel直接转图片
  3. session和cookie的应用场景和区别
  4. Webservice入门教程_编写天气预报的webservice
  5. 20个强大的jQuery翻书插件【 jQuery flipbook】
  6. Codeforces Round #470 (rated, Div. 2, based on VK Cup 2018 Round 1)B. Primal Sport
  7. [jQuery] 判断复选框checkbox是否选中checked
  8. EasyMock 简介
  9. 第45届国际大学生程序设计竞赛(ICPC)银川站太原理工大学收获4枚奖牌
  10. 《一切皆是映射:代码的本质》哈希算法 (Hash)
  11. 【第40题】2019年OCP认证12C题库062考试最新考试原题
  12. 2017-2018-1 20155322 20155327 实验一 开发环境的熟悉
  13. Oracle10g expdp impdp
  14. selenium的三种等待方式
  15. 上海移动视频客户端 for 8910
  16. moviepy音视频开发:audio_fadein、fadeout实现声音淡入淡出
  17. VMware中性能分配的问题
  18. 青春使命网页制作html,青春使命句子
  19. 身份证过期补办,派出所会打电话通知吗?
  20. 神奇智能搜索引擎:perplexity智能搜索引擎(ChatGPT与Edge合体——联网版chatGPT)

热门文章

  1. 基于原生js和css3实现barrage弹幕效果
  2. 在玩的时候服务器停机维护,结果进不了游戏,会被封号吗?,“吃鸡”停服当日,游戏里出现5个“提示”,看到第4个时被封号!...
  3. 基于AT89C52和DS18B20的空调温度精准控制系统
  4. 美年旅游_套餐管理_新增套餐
  5. 王者服务器维护杨戬,王者荣耀杨戬加强 王者荣耀2021年3月19日体验服英雄调整内容...
  6. 中台真的好可以解决一切问题?
  7. WPF 实现TextBox背景中提示文字(水印效果)
  8. 用python画猪_用Python画一只丑丑的猪头
  9. 项目总结:电子签名功能-对接第三方平台-01-名词定义了解
  10. 抽取文件夹中所有图片