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;

}

}

时间: 2024-08-05 01:45:12

iOS音频的后台播放 锁屏的相关文章

iOS音频的后台播放总结(后台网络请求歌曲,Remote控制,锁屏封面,各种打断)

iOS音频的后台播放总结(后台网络请求歌曲,Remote控制,锁屏封面,各种打断) 2013-12-11 21:13 1416人阅读 评论(0) 收藏 举报  分类: cocoa SDK(139)  目录(?)[+] 在没有网络的情况下,音频的后台播放比较简单,google一下可以搜到很多资料,但是如果每次歌曲的请求都是通过网络,就不成了,有时可以也扛不了几首,这里总结下实现方法,可以实现像电台一样的功能,后台播放,网络请求歌曲,Remote控制,锁屏有封面,电话和听歌打断处理等.   初始化A

iOS音频的后台播放总结

在没有网络的情况下,音频的后台播放比较简单,google一下可以搜到很多资料,但是如果每次歌曲的请求都是通过网络,就不成了,有时可以也扛不了几首,这里总结下实现方法,可以实现像电台一样的功能,后台播放,网络请求歌曲,Remote控制,锁屏有封面,电话和听歌打断处理等.   初始化AudioSession和基本配置 音频播放器采用的AVPlayer ,自己进行了功能封装,暂且不谈,在程序启动的时候需要配置AudioSession,AudioSession负责应用音频的设置,比如支不支持后台,打断等

iOS_33_音乐播放(后台播放+锁屏歌词)

最终效果图: 应用程序代理(后台播放三步曲) // // BeyondAppDelegate.h // 33_音效 // // Created by beyond on 14-9-10. // Copyright (c) 2014年 com.beyond. All rights reserved. // #import <UIKit/UIKit.h> @interface BeyondAppDelegate : UIResponder <UIApplicationDelegate>

iOS AvPlayer AvAudioPlayer音频的后台播放问题

王桂敏 iOS AvPlayer AvAudioPlayer音频的后台播放问题 iOS 4开始引入的multitask,我们可以实现像ipod程序那样在后台播放音频了.如果音频操作是用苹果官方的AVFoundation.framework实现,像用AvAudioPlayer,AvPlayer播放的话,要实现完美的后台音频播放,依据app的功能需要,可能需要实现几个关键的功能. 首先,播放音频之前先要设置AVAudioSession模式,通常只用来播放的App可以设为AVAudioSessionC

iOS开发-播放本地音频(可后台播放)

//初始化音乐 //创建音乐文件路径 NSString *musicFilePath = [[NSBundle mainBundle] pathForResource:@"eyeExe" ofType:@"mp3"]; //判断文件是否存在 if ([[NSFileManager defaultManager] fileExistsAtPath:musicFilePath]) { NSURL *musicURL = [NSURL fileURLWithPath:mu

ios开发实现取消自动锁屏

1 [UIApplication sharedApplication].idleTimerDisabled=YES;不自动锁屏 2 [UIApplication sharedApplication].idleTimerDisabled=NO;自动锁屏

iOS音频开发(录音+播放+剪辑+合成+压缩转码)

录音: //音频会话 AVAudioSession *session = [AVAudioSession sharedInstance]; NSError *sessionError; /* AVAudioSessionCategoryPlayAndRecord :录制和播放 AVAudioSessionCategoryAmbient :用于非以语音为主的应用,随着静音键和屏幕关闭而静音. AVAudioSessionCategorySoloAmbient :类似AVAudioSessionCa

iOS 音频录制与播放

最近项目中增加了即时通讯功能,借鉴各位大侠的杰作简单的写了个集成了音频录制和播放功能的类,欢迎借鉴与改善,点此链接下载

锁屏界面音频控制

1.在文件APPDelegate.m里,实现方法“- (void)remoteControlReceivedWithEvent:(UIEvent *)event”的重写,用来接收控制中心的事件. 1 // 在APPDelegate.m中声明一个通知事件的key 2 NSString *const AppDelegateReceiveRemoteEventsNotification = @"AppDelegateReceiveRemoteEventsNotification"; 3 ?