文档章节

【必看】AVAudioPlayer播放声音时加入了后台播放功能,看懂了吗?

妇女队长
 妇女队长
发布于 2014/05/06 15:13
字数 289
阅读 61
收藏 0

-(void)setAudioPlayer{

        //加入播放按钮        

        if (playButton==nil) {

                playButton = [UIButton buttonWithType:UIButtonTypeCustom];

                playButton.frame = CGRectMake(110, 120, 80, 80);

                [playButton setBackgroundImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal];

                playButton.alpha = 0.5;

                [firstPage addSubview:playButton];

        }

        

        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];

        if (soundPath!=nil) {

                float volumn = [bookSetting getUpdatedVolumn];

                player = [[SoundPlayer alloc]initWithPath:soundPath bookName:bookName volumn:volumn];

        }

        [pool release];

}

-(void)setPlayInBackground{

        if (soundPath!=nil) {

                //后台播放

                [self registerForBackgroundNotifications];

                OSStatus result = AudioSessionInitialize(NULL, NULL, NULL, NULL);

                if (result)

                        NSLog(@"Error initializing audio session! %d", result);

                

                [[AVAudioSession sharedInstance] setDelegate: self];

                NSError *setCategoryError = nil;

                [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: &setCategoryError];

                if (setCategoryError)

                        NSLog(@"Error setting category! %d", setCategoryError);

                

                result = AudioSessionAddPropertyListener (kAudioSessionProperty_AudioRouteChange, RouteChangeListener, self);

                if (result) 

                        NSLog(@"Could not add property listener! %d", result);

        }

}

#pragma mark AudioSession handlers


void RouteChangeListener(void * inClientData,

                                                 AudioSessionPropertyID        inID,

                                                 UInt32 inDataSize,

                                                 const void * inData){

        BookContentView2* This = (BookContentView2*)inClientData;

        

        if (inID == kAudioSessionProperty_AudioRouteChange) {

                

                CFDictionaryRef routeDict = (CFDictionaryRef)inData;

                NSNumber* reasonValue = (NSNumber*)CFDictionaryGetValue(routeDict, CFSTR(kAudioSession_AudioRouteChangeKey_Reason));

                

                int reason = [reasonValue intValue];

                

                if (reason == kAudioSessionRouteChangeReason_OldDeviceUnavailable) {

                        [This.player stop];

                }

        }

}


- (void)audioPlayerBeginInterruption:(AVAudioPlayer *)p

{

        NSLog(@"Interruption begin. Updating UI for new state");

        // the object has already been paused,        we just need to update UI

        if (inBackground)

        {

                [self updateViewForPlayerStateInBackground:p];

        }

        else

        {

                [self updateViewForPlayerState:p];

        }

}


- (void)audioPlayerEndInterruption:(AVAudioPlayer *)p

{

        NSLog(@"Interruption ended. Resuming playback");

        [self startPlaybackForPlayer:p];

}


#pragma mark background notifications

- (void)registerForBackgroundNotifications

{

        [[NSNotificationCenter defaultCenter] addObserver:self

                                                                                         selector:@selector(setInBackgroundFlag)

                                                                                                 name:UIApplicationWillResignActiveNotification

                                                                                           object:nil];

        

        [[NSNotificationCenter defaultCenter] addObserver:self

                                                                                         selector:@selector(clearInBackgroundFlag)

                                                                                                 name:UIApplicationWillEnterForegroundNotification

                                                                                           object:nil];

}


- (void)setInBackgroundFlag

{

        inBackground = YES;

}


- (void)clearInBackgroundFlag

{

        inBackground = NO;

}

© 著作权归作者所有

共有 人打赏支持
妇女队长
粉丝 0
博文 4
码字总数 2449
作品 0
石景山
私信 提问
AVAudioPlayer 音频播放器 使用 教程

IOS中有三种播放音频的方式:AVAudioPlayer、音频服务、音频队列。 此文主要讲AVAudioPlayer,其他两个请见相关文章。 AVAudioPlayer在AVFoundation框架下,所以我们要导入AVFoundation.fram...

孙启超
2012/06/05
0
0
iPhone 应用开发:音频播放

在 iPhone 应用或者是游戏的开发过程中,对声音的支持是必不可少的。在我做过的几个应用中,每个都涉及到音效,所以在这里做个简单的归纳,很多都是引用自《iPhone Application Programming ...

长平狐
2012/08/13
95
0
AVAudioPlayer音频播放器—IOS开发

IOS中有三种播放音频的方式:AVAudioPlayer、音频服务、音频队列。 此文主要讲AVAudioPlayer,其他两个请见相关文章。 AVAudioPlayer在AVFoundation框架下,所以我们要导入AVFoundation.fram...

junwong
2012/03/05
21.3K
1
ios音频播放

在 iPhone 应用或者是游戏的开发过程中,对声音的支持是必不可少的。在我做过的几个应用中,每个都涉及到音效,所以在这里做个简单的归纳,很多都是引用自《iPhone Application Programming ...

长平狐
2012/10/09
255
0
iPhone 应用开发:音频播放

在 iPhone 应用或者是游戏的开发过程中,对声音的支持是必不可少的。在我做过的几个应用中,每个都涉及到音效,所以在这里做个简单的归纳,很多都是引用自《iPhone Application Programming ...

长平狐
2012/08/13
118
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux系统设置全局的默认网络代理

更改全局配置文件/etc/profile all_proxy="all_proxy=socks://rahowviahva.ml:80/"ftp_proxy="ftp_proxy=http://rahowviahva.ml:80/"http_proxy="http_proxy=http://rahowviahva.ml:80/"......

临江仙卜算子
24分钟前
1
0
java框架学习日志-6(bean作用域和自动装配)

本章补充bean的作用域和自动装配 bean作用域 之前提到可以用scope来设置单例模式 <bean id="type" class="cn.dota2.tpye.Type" scope="singleton"></bean> 除此之外还有几种用法 singleton:......

白话
47分钟前
4
0
在PC上测试移动端网站和模拟手机浏览器的5大方法

总结很全面,保存下来以备不时之需。原文地址:https://www.cnblogs.com/coolfeng/p/4708942.html

kitty1116
今天
5
0
分布式Session共享解决方案

分布式Session一致性? 说白了就是服务器集群Session共享的问题 Session的作用? Session 是客户端与服务器通讯会话跟踪技术,服务器与客户端保持整个通讯的会话基本信息。 客户端在第一次访...

Java干货分享
今天
10
0
开源软件和开源模式面临的生存危机

导读 开源模式可能正面临一场危机。越来越多的开源软件和平台被大型云计算服务商融入自家的云服务体系,并以此获利颇丰,但并不支付费用,也没有对开源社区做出相应的回馈。而实际上,大部分...

问题终结者
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部