iPhone - AVAudioPlayer,kAudioSessionCategory_AmbientSound和iPod音乐

时间:2009-05-16 08:47:15

标签: iphone audio ipod

我在我的app delegate中使用以下音频会话:

  AudioSessionInitialize(NULL, NULL, NULL, self);
  UInt32 sessionCategory = kAudioSessionCategory_AmbientSound;
  AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);

  AudioSessionSetActive(true);

我希望用户能够播放iPod音乐并同时使用我的应用程序,这很棒且工作正常...我的应用程序退出并允许iPod音乐播放。

我遇到的问题是...在用户退出我的应用程序后,进入iPod应用程序并暂停,当他们回到我的应用程序时,我的声音都没有用。就像它仍然认为iPod会话是活跃的,即使它没有播放任何音乐!

我基本上只想在iPod音乐暂停后重新激活我的音频会话。就目前而言,在我曾经通过iPod应用程序播放音乐之后,除非我重新编译,否则我完全无法恢复应用程序的声音。 :(任何人都有任何想法?

编辑:我忘了提到我正在使用AVAudioPlayer类的基本实现来播放应用程序的音频。

谢谢!

1 个答案:

答案 0 :(得分:7)

好吧,我以为我会把所有人都贴出去,以防它帮助其他人......我所做的可能有点像个hackish,但似乎有所作为!


    UInt32 isPlaying;
    UInt32 propertySize = sizeof(isPlaying);
    OSStatus status;

    // check to see if their iPod music is playing
    status = AudioSessionGetProperty(kAudioSessionProperty_OtherAudioIsPlaying, &propertySize, &isPlaying);

    // set the session category accordingly
    if(!isPlaying) {
      NSLog(@"...SoloAmbientSound");
      UInt32 sessionCategory = kAudioSessionCategory_SoloAmbientSound;
      AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
    }else{
      NSLog(@"...AmbientSound");
      UInt32 sessionCategory = kAudioSessionCategory_AmbientSound;
      AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
    }