iOS背景音乐问题

时间:2012-03-28 07:11:38

标签: ios xcode audio

  

可能重复:
  iOS SDK : playing music on the background and switching views

大家好我正在使用此代码在我的应用程序启动时播放背景音乐。但是当我将视图切换到我的SecondView并返回到我的Firstview时,音乐重新开始并重叠当前播放的音乐并保持当我回到我的Firstview时重叠音乐,当我从SecondView切换回我的Firstview时,如何让音乐重新开始。

FirstViewController.m

- (void)viewDidLoad {
  NSString *path = [[NSBundle mainBundle] pathForResource:@"drums" ofType:@"mp3"];
  theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPathath] error:NULL];
  theAudio.delegate = self;
  theAudio.numberOfLoops = -1;
  [theAudio play]; 

3 个答案:

答案 0 :(得分:3)

您可以使用NSUserDefaults保存音乐播放状态,因此在加载视图时,只有在尚未播放的情况下才能播放音乐。

 if ([[NSUserDefaults standardUserDefaults] stringForKey:@"music"] == nil) {
    NSString *path = [[NSBundle mainBundle] pathForResource:@"drums" ofType:@"mp3"];
    theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPathath] error:NULL];
    theAudio.delegate = self;
    theAudio.numberOfLoops = -1;
    [theAudio play]; 
    [[NSUserDefaults standardUserDefaults] setObject:@"-" forKey:@"music"]; }

退出应用时,您需要将此密钥重置为nil。否则,如果玩家退出应用程序,下次应用程序重新启动时,@"音乐"字符串不会是零。

转到 projectAppDelegate.m 文件:

- (void)applicationDidEnterBackground:(UIApplication *)application {
        [[NSUserDefaults standardUserDefaults] setObject:nil forKey:@"music"]; }

如果在整个应用程序中播放音乐,请按照以下所示放置音乐播放代码以确保安全。别忘了在projectAppDelegate.h文件中声明AVAudioPlayer * theAudio。

- (void)applicationDidBecomeActive:(UIApplication *)application {
    NSString *path = [[NSBundle mainBundle] pathForResource:@"drums" ofType:@"mp3"];
    theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPathath] error:NULL];
    theAudio.delegate = self;
    theAudio.numberOfLoops = -1;
    [theAudio play]; 
    [[NSUserDefaults standardUserDefaults] setObject:@"-" forKey:@"music"]; }

我可能在这里错过了一些内容。只需运行一些测试,就可以按照自己喜欢的方式进行操作。我刚尝试了我的应用程序,它对我有用。

答案 1 :(得分:1)

两个选项,

1-在第一个视图消失时停止播放器。

[theAudio stop]  in `viewWillDisappear`

2-如果你不想再回来玩。 在appDelegate类中声明theAudio。并在分配之前检查是否已分配。

if(!appDelegate.theAudio)
{
   NSString *path = [[NSBundle mainBundle] pathForResource:@"drums" ofType:@"mp3"];
  appDelegate.theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPathath]   error:NULL];
  theAudio.delegate = self;
  theAudio.numberOfLoops = -1;
  [theAudio play]; 
}
else
{

 [theAudiostop];
   [theAudio play];
}

答案 2 :(得分:0)

每次显示视图时,都要重新分配并重新创建AVAudioPlayer。你应该尽可能避免这种情况。作为问题的解决方案,根据您的代码,在[theAudio stop]viewDidDisappear个事件中调用viewDidUnload。当视图进入后台时,这将停止音频播放器。