iOS AVAudioPlayer和AVAudioPlayerDelegate-音频播放处理中断
2016-09-08 20:56
525 查看
学习总是在进行。 一、AVAudioPlayer如何处理中断 AVAudioPlayer类提供了代理方法,用来处理当播放音频文件时,发生来电、闹钟等事件。设置代理并遵守AVAudioPlayerDelegate协议,<span style="font-family: Arial, Helvetica, sans-serif;">AVAudioPlayerDelegate中提供的代理方法</span>
二、AVAudioPlayer代理方法实现
看例子:
1.加入音频相应的框架到项目中。 #import 2.声明音频播放类,并且实现AVAudioPlayerDelegate协议 @interface SquareViewController : UIViewController<AVAudioPlayerDelegate>{ AVAudioPlayer *_audioPlayer; } @property (nonatomic,retain)AVAudioPlayer *audioPlayer; 3.实现AVAudioPlayerDelegate协议方法。 #pragma mark - AVAudioPlayerDelegate // 音频播放完成时 - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{ // 音频播放完成时,调用该方法。 // 参数flag:如果音频播放无法解码时,该参数为NO。 //当音频被终端时,该方法不被调用。而会调用audioPlayerBeginInterruption方法 // 和audioPlayerEndInterruption方法 } // 解码错误 - (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error{ NSLog(@"解码错误!"); } // 当音频播放过程中被中断时 - (void)audioPlayerBeginInterruption:(AVAudioPlayer *)player{ // 当音频播放过程中被中断时,执行该方法。比如:播放音频时,电话来了! // 这时候,音频播放将会被暂停。 } // 当中断结束时 - (void)audioPlayerEndInterruption:(AVAudioPlayer *)player withOptions:(NSUInteger)flags{ // AVAudioSessionInterruptionFlags_ShouldResume 表示被中断的音频可以恢复播放了。 // 该标识在iOS 6.0 被废除。需要用flags参数,来表示视频的状态。 NSLog(@"中断结束,恢复播放"); if (flags == AVAudioSessionInterruptionFlags_ShouldResume && player != nil){ [player play]; } } //- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player withFlags:(NSUInteger)flags { // // //该方法在iOS 6.0 中被废除 // if (flags == AVAudioSessionInterruptionFlags_ShouldResume && player != nil){ // [player play]; // } // //} // //- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player{ // //该方法被废除 // //} 注意:因为以上两个方法在iOS 6.0 已经被废除。故注释。 4.使用音频播放器播放音频文件 //异步加载音频播放器进行播放 self.view.backgroundColor = [UIColor whiteColor]; dispatch_queue_t dispatchQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(dispatchQueue, ^(void) { NSBundle *mainBundle = [NSBundle mainBundle]; NSString *filePath = [mainBundle pathForResource:@"mySong" ofType:@"mp3"]; NSData *fileData = [NSData dataWithContentsOfFile:filePath]; NSError *error = nil; // 初始化音频控制器 self.audioPlayer = [[AVAudioPlayer alloc] initWithData:fileData error:&error]; if (self.audioPlayer != nil){ self.audioPlayer.delegate = self;// 设置 delegate if ([self.audioPlayer prepareToPlay] && [self.audioPlayer play]){ // 播放成功 } else { // 播放失败 } } else { // 初始化 AVAudioPlayer 失败 } });
相关文章推荐
- iOS AvPlayer AvAudioPlayer音频的后台播放问题
- ios处理播放音频时的中断
- iOS AvPlayer AvAudioPlayer音频的后台播放
- AVAudioPlayer和AVAudioPlayerDelegate-iOS音频播放器
- iOS AvPlayer AvAudioPlayer音频的后台播放问题
- iOS用AVAudioPlayer播放m4a音频
- iOS开发之AVAudioPlayer 音频播放
- IOS三种播放音频的方式:AVAudioPlayer、音频服务、音频队列。
- iOS AvPlayer AvAudioPlayer音频的后台播放问题
- iOS开发之AVAudioPlayer 音频播放
- IOS中有三种播放音频的方式:AVAudioPlayer、音频服务、音频队列。
- iOS开发之AVAudioPlayer 音频播放
- IOS AVAudioPlayer 音频播放
- 音频播放协议AVAudioPlayerDelegate 函数简介
- iOS开发之AVAudioPlayer 音频播放
- iOS开发之AVAudioPlayer 音频播放
- iOS AvPlayer AvAudioPlayer音频的后台播放问题
- iOS开发之AVAudioPlayer 音频播放
- ios 使用AVAudioRecorder录制音频,然后用AVAudioPlayer进行播放
- iOS开发之AVAudioPlayer 音频播放