如何在iOS 4中在后台播放多个音频文件?

时间:2010-09-21 09:47:40

标签: iphone ios4 avaudioplayer multitasking

我使用AVAudioPlayer和AVAudioSession在我的iPhone应用程序中在后台运行音频......

现在我的问题是我已经有一个编写的代码,它会从用户输入许多歌曲并使用AVAudioPlayer一个接一个地播放...

问题是当应用程序在播放其中一个文件时进入后台时,音频会继续播放,但是当它完成时,声音会消失...在文件完成时的前景中,我只是做了一些代码玩下一个,但在后台这是不可能的......

我考虑过要求一些时间来完成这项工作并运行我的代码,但我不能这样做,因为音频文件总是会改变而且它们可能很长......所以请告诉我该怎么办?是否有任何内置的播放列表播放器作为背景音频运行?或者还有其他解决方案吗?我真的需要把它投入工作......

非常感谢

3 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,还没有完全解决它。 audioDidFinishPlaying委托方法仍然会触发,你可以使用UIAplication的beginBackgroundTask创建一个新的AVaudioPlayer实例,确保AVAudioSession仍处于活动状态等等。但是当我尝试播放新的AVAudioPlayer实例时,它会立即暂停。我的怀疑/恐惧是没有办法从后台启动音频,只在应用程序状态转换发生时保持播放。不过,我很想做错。

答案 1 :(得分:0)

这很容易..如果您使用的是音频会话,则只需更改cateogry ...

http://developer.apple.com/library/ios/#documentation/Audio/Conceptual/AudioSessionProgrammingGuide/AudioSessionCategories/AudioSessionCategories.html

该链接具有类别...因此请使用其中一种,并且您可以在后台启动声音: AVAudioSessionCategoryPlayback kAudioSessionCategory_MediaPlayback

  • 环境可能不起作用。

答案 2 :(得分:0)

//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 stop]; //当你想要停止它时,取消注释这一行。