如何在iOS设备锁定或其他应用程序时处理后台音频播放?

时间:2012-05-03 10:06:48

标签: ios audio background multitasking locked

使用OpenFrameworks为iOS设计生成音乐系统,我需要提供一种模式,用户可以在以下情况下听取应用程序生成的音乐:

  • 设备已锁定
  • 用户使用其他应用

某些应用程序(如BLOOM或闹钟)就是这样,并向用户建议启用/禁用此功能。

有关于此的任何提示吗?

6 个答案:

答案 0 :(得分:34)

播放背景音频

  

连续播放或录制音频的应用程序(即使应用程序是   在后台运行)可以注册执行那些任务   背景。您可以从后台模式部分启用音频支持   Xcode项目中的Capabilities选项卡。 (您也可以启用   通过在音频中包含UIBackgroundModes键来获得此支持   应用程序的Info.plist文件中的值。)播放音频内容的应用程序   背景必须播放听觉内容,而不是沉默。

Apple reference "Playing and Recording Background Audio"

Ensuring That Audio Continues When the Screen Locks

为了启用/禁用此功能,我找到Activating and Deactivating Your Audio Session,我自己没有尝试过,但它看起来就像你需要的那样。

答案 1 :(得分:29)

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

即。  1)将所需背景模式设置为App播放音频

2)设置应用程序不在后台运行到NO。

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

然后,您需要在AppDelegate中编写这么多代码

现在,您可以在手机屏幕锁定或进入后台时轻松运行音频。

答案 2 :(得分:3)

在xCode项目设置和代码中进行以下更改。

步骤1)在Xcode导航器中选择项目文件。然后,从“功能”部分,打开“背景模式”子部分。在为您提供背景模式列表后,请在“音频和音频”上打勾。 Airplay开关。

stp 2)使用以下swift代码,基本上你需要为你的应用程序设置音频会话。

compareToBl

此音频播放会话将播放您的应用程序播放,即使应用程序处于后台或手机处于静音模式或设备已锁定。

答案 3 :(得分:1)

看看本教程。它有一些后台服务示例

enter image description here

答案 4 :(得分:0)

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

1)将所需的背景模式设置为App播放音频

2)设置应用程序不在后台运行到NO。

let dispatchQueue = DispatchQueue.global()
            dispatchQueue.async(execute: {
                    do{
                        let session = AVAudioSession.sharedInstance()

                        try session.setCategory(AVAudioSessionCategoryPlayback)
                        try session.setActive(true)

                        self.isObjectAllocate = true
                        if self.isPlayed == false{
                            self.playSound(soundName: "http://radio.zahraun.com:8000/live.m3u")
                            self.isPlayed = true
                            self.btnPlayAudio.setImage(#imageLiteral(resourceName: "pause") , for: .normal)

                        }else{
                            self.audioPlayer.pause()
                            self.isPlayed = false
                            self.btnPlayAudio.setImage(#imageLiteral(resourceName: "audioPlay"), for: .normal)
                        }
                    }
                    catch{
                        print("\(error)")
                    }
            });

答案 5 :(得分:-2)

您也可以使用此代码:

AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayback error:NULL];

AVAudioSession *backgroundMusic = [AVAudioSession sharedInstance];

[backgroundMusic setCategory:AVAudioSessionCategoryPlayback error:NULL];