iOS AVAudioPlayer和AVAudioPlayerDelegate-音频播放处理中断
生活随笔
收集整理的這篇文章主要介紹了
iOS AVAudioPlayer和AVAudioPlayerDelegate-音频播放处理中断
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
學習總是在進行。
一、AVAudioPlayer如何處理中斷
AVAudioPlayer類提供了代理方法,用來處理當播放音頻文件時,發生來電、鬧鐘等事件。設置代理并遵守AVAudioPlayerDelegate協議,<span style="font-family: Arial, Helvetica, sans-serif;">AVAudioPlayerDelegate中提供的代理方法</span>
二、AVAudioPlayer代理方法實現 看例子:
1.加入音頻相應的框架到項目中。 #import2.聲明音頻播放類,并且實現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;// 設置 delegateif ([self.audioPlayer prepareToPlay] && [self.audioPlayer play]){// 播放成功 }else {// 播放失敗 }}else {// 初始化 AVAudioPlayer 失敗 }});
二、AVAudioPlayer代理方法實現 看例子:
1.加入音頻相應的框架到項目中。 #import2.聲明音頻播放類,并且實現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;// 設置 delegateif ([self.audioPlayer prepareToPlay] && [self.audioPlayer play]){// 播放成功 }else {// 播放失敗 }}else {// 初始化 AVAudioPlayer 失敗 }});
總結
以上是生活随笔為你收集整理的iOS AVAudioPlayer和AVAudioPlayerDelegate-音频播放处理中断的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Swift傻傻分不清楚系列(十二) 属性
- 下一篇: iOS开发实用技巧—Objective-