【问题标题】:Sound when the app is in the Background iOS当应用程序处于后台 iOS 时发出声音
【发布时间】:2011-09-25 10:34:16
【问题描述】:

我正在尝试在我的应用处于后台时播放声音。我使用AVAudioPlayer,当应用程序处于活动状态时它可以正常工作,但在后台AVAudioPlayer 没有播放任何内容,我不知道该怎么办。

我认为我可以使用UILocalNotification,但它在锁屏中显示和提醒,我不想要它。


感谢您的回答。我还有一个疑问。如果我创建了这个音频会话,并且我正在播放音乐,系统会同时混合两者吗?

如何降低 ipod 音乐音量,我的应用程序声音会在播放(3 秒)后再次增加,就像 AppStore 中大多数正在运行的应用程序一样。 (也在后台)

这是我在 AppDelegate 中的代码

//Creamos la sesión de audio
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
    [[AVAudioSession sharedInstance] setActive: YES error: nil];

在我看来,当我想播放声音时:

-(void)avisosound{

   // AudioSessionSetActive(YES);
    NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/sound.wav", [[NSBundle mainBundle] resourcePath]]];

    NSError *error;
    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
    audioPlayer.numberOfLoops = 0;

    if (audioPlayer == nil){
    }
    else{
        [audioPlayer play];  
    }
    AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
    }

但是当我播放声音时,ipod 音乐停止了。

【问题讨论】:

  • 如果您想提出一个新问题,最好创建一个新问题,而不是添加到旧问题中。通过提出新问题,您可以获得更好的回答。

标签: ios iphone audio background


【解决方案1】:

您需要在 plist 文件中进行一些更改。

  1. 必需的后台模式设置为应用播放音频
  2. 应用程序不在后台运行设置为

然后,您需要在您的 AppDelegate 中编写以下代码:

   NSError *setCategoryErr = nil;
   NSError *activationErr  = nil;
   [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error:&setCategoryErr];
   [[AVAudioSession sharedInstance] setActive:YES error:&activationErr];

现在,您可以在手机屏幕锁定或您的应用处于后台时轻松运行音频。

【讨论】:

  • 您好,我尝试了您的代码,但没有成功。 “将应用程序不在后台运行设置为是”不应该设置为否吗?对于“应用程序播放音频所需的背景模式”,我应该在项目 [0] 中添加什么?
  • @dhaval rupani 我看到你的答案是第 3 次开始播放声音,并且到处都有复选标记或赞成票,但我仍然不明白你是如何开始播放声音的?请揭示这些豆子并做出澄清。
【解决方案2】:

即使您的 iPhone 屏幕锁定,以下内容也会告诉系统继续播放音频:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:NULL];

(大多数时候你把它放在你的didFinishLaunchingWithOptions。)

要告诉系统在您的应用处于后台时播放您的音频,请在您的 plist 中添加 UIBackgroundModes 并将其设置为 audio

(任何需要播放音频的前台应用都将优先于这些设置和您应用的声音播放)。

要添加“闪避”,在播放音频时降低其他音频的音量,您需要实现 kAudioSessionProperty_OtherMixableAudioShouldDuck。在音频会话编程指南中查找。

【讨论】:

    【解决方案3】:

    要在后台播放声音(假设您的应用设置了正确的后台模式),您的应用必须在前台启动声音而不是停止它。最简单的方法是使用音频队列 API 或 RemoteIO 音频单元。

    【讨论】:

      【解决方案4】:
      猜你喜欢
      • 1970-01-01
      • 2014-11-12
      • 1970-01-01
      • 1970-01-01
      • 2013-05-20
      • 1970-01-01
      • 1970-01-01
      • 2017-05-24
      • 2013-04-20
      相关资源
      最近更新 更多