使用 AVAudioSession 实现后台播放音乐

1. 前言  

  • AVAudioSession是一个单例,无需实例化即可直接使用。AVAudioSession在各种音频环境中起着非常重要的作用
  • 针对不同的音频应用场景,需要设置不同的音频会话分类

1.1 ?AVAudioSession的类别  

  • AVAudioSessionCategoryAmbient

    –混音播放,例如雨声、汽车引擎等,可与其他音乐一起播放

  • AVAudioSessionCategorySoloAmbient

    –后台播放,其他音乐将被停止

  • AVAudioSessionCategoryPlayback

    –独占音乐播放

  • AVAudioSessionCategoryRecord

    –录制音频

  • AVAudioSessionCategoryPlayAndRecord

    –播放和录制音频

  • AVAudioSessionCategoryAudioProcessing

    –使用硬件解码器处理音频,该音频会话使用期间,不能播放或录音

图解:

2. 后台播放音乐  

2.1 ?设置后台任务  


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

+?(UIBackgroundTaskIdentifier)backgroundPlayerID:(UIBackgroundTaskIdentifier)backTaskId

{

????//?1.?设置并激活音频会话类别

???????AVAudioSession?*session?=?[AVAudioSession?sharedInstance];

????[session?AVAudioSessionCategoryPlayback?error:nil];

????[session?setActive:YES?error:nil];

????//?2.?允许应用程序接收远程控制

????[[UIApplication?sharedApplication]?beginReceivingRemoteControlEvents];

????//?3.?设置后台任务ID

??????UIBackgroundTaskIdentifier?newTaskId?=?UIBackgroundTaskInvalid;

????newTaskId?=?[[UIApplication?sharedApplication]?beginBackgroundTaskWithExpirationHandler:nil];

????if?(newTaskId?!=?UIBackgroundTaskInvalid?&&?backTaskId?!=?UIBackgroundTaskInvalid)?{

????????[[UIApplication?sharedApplication]?endBackgroundTask:backTaskId];

????}

????return?newTaskId;

}

2.2 ?设置后台播放  


1

2

3

4

5

6

7

//后台播放音频设置?

AVAudioSession?*session?=?[AVAudioSession?sharedInstance];???

[session?setActive:YES?error:nil];???

[session?setCategory:AVAudioSessionCategoryPlayback?error:nil];??

???

//让app支持接受远程控制事件?

[[UIApplication?sharedApplication]?beginReceivingRemoteControlEvents];

2.3 ?记录后台播放代号  


1

2

3

4

5

//?后台播放任务Id

UIBackgroundTaskIdentifier??_bgTaskId;

?

//?设置音频会话,允许后台播放

_bgTaskId?=?[SoundTool?backgroundPlayerID:_bgTaskId];

时间: 2024-08-25 18:45:09

使用 AVAudioSession 实现后台播放音乐的相关文章

IOS后台播放音乐

IOS后台播放音乐 博客分类: IOS http://www.apple.com.cn/developer/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/AudioandVideoTechnologies/AudioandVideoTechnologies.html#//apple_ref/doc/uid/TP40007072-CH19-SW32 1.首先在工程中导入播放音乐所使用的框架:AV Fo

iOS 后台播放音乐

//后台播放音乐 -(void)playAudio{ dispatch_queue_t dispatchQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(dispatchQueue, ^(void) { NSError *audioSessionError = nil; AVAudioSession *audioSession = [AVAudioSession shared

后台播放音乐

iOS 4开始引入的multitask,我们可以实现像ipod程序那样在后台播放音频了.如果音频操作是用苹果官方的AVFoundation.framework实现,像用AvAudioPlayer,AvPlayer播放的话,要实现完美的后台音频播放,依据app的功能需要,可能需要实现几个关键的功能. 首先,播放音频之前先要设置AVAudioSession模式,通常只用来播放的App可以设为AVAudioSessionCategoryPlayback即可.模式意义及其他模式请参考文档. //后台播放

IOS后台运行 之 后台播放音乐

iOS 4开始引入的multitask,我们可以实现像ipod程序那样在后台播放音频了.如果音频操作是用苹果官方的AVFoundation.framework实现,像用AvAudioPlayer,AvPlayer播放的话,要实现完美的后台音频播放,依据app的功能需要,可能需要实现几个关键的功能. 首先,播放音频之前先要设置AVAudioSession模式,通常只用来播放的App可以设为AVAudioSessionCategoryPlayback即可.模式意义及其他模式请参考文档. //后台播放

ios 后台播放音乐1条注意事项

除了设置程序的后台模式,还需要几行代码 AVAudioSession *session = [AVAudioSession sharedInstance]; [session setCategory:AVAudioSessionCategoryPlayback error:nil]; [session setActive:YES error:nil]; 不加这几行代码是无法在真机上后台播放的!(模拟器好像可以不加) 在附一张background模式的设置图

手机影音第十五天,利用service实现后台播放音乐,在通知栏显示当前音乐信息等

代码已经托管到码云上,有兴趣的小伙伴可以下载看看 https://git.oschina.net/joy_yuan/MobilePlayer 先来一张目前的音乐播放器的效果图,当播放时,手机的状态通知栏也会有音乐信息显示. 这里可以看到有歌名.演唱者,还有歌曲的总时间,当前播放时间,当前播放进度,音乐暂停.下一首,上一首,音乐循环模式(单曲循环,顺序播放.循环播放)功能的实现.下一步就是把中间空白的部分填充歌词,然后做成根据进度显示歌词. 由于这次的内容有点多,是写了一天半的代码,讲的没那么细,

iOS 实现后台 播放音乐声音 AVAudioPlayer

1.步骤一:在Info.plist中,添加"Required background modes"键,value为:App plays audio 或者: 步骤二: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{    self.window = [[[UIWindow alloc] initWithFrame:[[U

iOS开发简单的实现后台任务(诸如后台播放音乐,定时器,后台定位等)

最多能运行多长时间,没挑战过极限,具体能保持多长时间需要自己测试下. 注意:用真机测试 直接上代码 在appdelegate的.m中的进入后台时加入一些代码操作即可 /** *  当app进入后台时调用 */ - (void)applicationDidEnterBackground:(UIApplication *)application { /** *  app的状态 *  1.死亡状态:没有打开app *  2.前台运行状态 *  3.后台暂停状态:停止一切动画.定时器.多媒体.联网操作,

iOS_33_音乐后台播放

音乐后台播放:三个步骤 在appDelegate中的didEnterBackground方法中实现: app的beginBackgroundTaskWithExpirationHandler方法 开启后台任务,让程序在后台运行 - (void)applicationDidEnterBackground:(UIApplication *)application { // Use this method to release shared resources, save user data, inv