如何在 iOS 4 中在后台播放多个音频文件?
Posted
技术标签:
【中文标题】如何在 iOS 4 中在后台播放多个音频文件?【英文标题】:How to play multiple audio files in the background in iOS 4? 【发布时间】:2010-09-21 09:47:39 【问题描述】:我使用 AVAudioPlayer 和 AVAudiosession 在我的 iPhone 应用程序的后台运行音频...
现在我的问题是,我已经编写了一个代码,该代码将一些歌曲作为用户的输入,并使用 AVAudioPlayer 依次播放它们...
问题是,当应用程序在播放其中一个文件时进入后台时,音频会继续播放,但播放完毕后,声音会消失...在前台播放文件时,我只是做一些代码播放下一个,但在后台这是不可能的......
我曾考虑申请一些时间来完成这项工作并运行我的代码,但我无法做到这一点,因为音频文件总是会更改并且它们可能很长......所以请告诉我我应该怎么做?是否有任何作为背景音频运行的内置播放列表播放器?还是有其他解决方案?我真的需要把它投入工作......
非常感谢
【问题讨论】:
【参考方案1】:我遇到了同样的问题,但还没有完全解决。 audioDidFinishPlaying 委托方法仍然触发,您可以使用 UIAplication 的 beginBackgroundTask 创建一个新的 AVaudioPlayer 实例,确保 AVAudioSession 仍然处于活动状态等。但是当我尝试播放新的 AVAudioPlayer 实例时,它会立即暂停。我的怀疑/担心是没有办法从后台启动音频,只有在应用程序状态转换发生时才继续播放。不过,我很愿意犯错。
【讨论】:
继续解决这个问题,我注意到 MPMoviePlayerController 可以被赋予一个新的 URL 而不会被破坏和重新实例化,因此您在后台运行时保持活动的音频会话。 (而且 MPMoviePlayer 仅适用于音频,尽管它的名字。)【参考方案2】:这很简单 ..如果您使用的是音频会话,只需更改类别...
http://developer.apple.com/library/ios/#documentation/Audio/Conceptual/AudioSessionProgrammingGuide/AudioSessionCategories/AudioSessionCategories.html
链接有类别...所以使用其中之一,您就可以在后台启动声音: AVAudioSessionCategoryPlayback kAudioSessionCategory_MediaPlayback
环境的可能不起作用。【讨论】:
【参考方案3】://ViewController.h ,write below code
@interface ViewController : UIViewController<AVAudioRecorderDelegate,AVAudioPlayerDelegate>
//assign property to player
@property(nonatomic,retain) AVAudioPlayer *player;
//then write in ViewController.m file in ViewDidLoad Method below code
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance] setActive: YES error: nil];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
NSError *soundError;
NSString *path=[[NSBundle mainBundle]pathForResource:@"soundFileName" ofType:@"mp3"]; //.mp3 file for player
NSURL *file=[[NSURL alloc]initFileURLWithPath:path]; //path
_player=[[AVAudioPlayer alloc]initWithContentsOfURL:file error:&soundError]; //player Object
if(_player == nil)
NSLog(@"player is empty because of %@",soundError);
else
[_player play];
_player.volume=1.0;
[_player setDelegate:self];
// 你可以使用停止播放器 // [_player 停止]; //当你想停止它时取消注释。
【讨论】:
以上是关于如何在 iOS 4 中在后台播放多个音频文件?的主要内容,如果未能解决你的问题,请参考以下文章