是否可以在后台播放来自应用程序的声音

Posted

技术标签:

【中文标题】是否可以在后台播放来自应用程序的声音【英文标题】:Is it possible to play a sound from an app in background 【发布时间】:2020-10-27 13:32:47 【问题描述】:

我正在开发一个连接到 iBeacon 的 ios 应用程序。 如果外部参数匹配,我希望能够从手机播放声音。 我已启用“音频、Airplay 和画中画”。在后台模式中。

现在我有一个问题,它只能播放来自应用程序的声音,而:

应用在前台。 屏幕被锁定,手机没有静音。

我希望它也能够播放声音,同时:

锁屏和手机静音。 后台(当应用由 iBeacon 启动时)。

有什么办法可以做到吗?

我用来播放声音的功能是:

private var avPlayer: AVAudioPlayer?

// MARK: - Play Sound
internal func playSound(forResource resource: String, ofType type: String) 
    guard let path = Bundle.main.path(forResource: resource, ofType: type)  else 
        print("Test: Failed getting path for \(resource)")
        return
    
    let url = URL(fileURLWithPath: path)
    
    // Handle playing in background
    let session = AVAudioSession.sharedInstance()
    do 
        try session.setCategory(.playback, options: [.duckOthers])
        try session.setActive(true, options: .notifyOthersOnDeactivation)
     catch 
        print("Test: Failed setting category on session \(error)")
    
    
    do 
        avPlayer = try AVAudioPlayer(contentsOf: url)
     catch let error 
        print("Test: Failed adding url to AVAudioPlayer \(error)")
    
    
    avPlayer?.play()

并称其为:

        playSound(forResource: "SoundToPlay", ofType: "wav")

【问题讨论】:

您需要开启背景音频:developer.apple.com/documentation/avfoundation/… @KirilS。音频、Airplay 和画中画。在后台模式下启用。 【参考方案1】:

如果您将应用设置为侦听信标区域通知,那么您可以在进入或离开某个区域时触发声音播放,即使手机已锁定和/或您的应用未运行也是如此。我不确定如果用户将手机静音是否会播放(我怀疑不会)

【讨论】:

以上是关于是否可以在后台播放来自应用程序的声音的主要内容,如果未能解决你的问题,请参考以下文章

我们可以在 iPhone 应用程序中以特定间隔在后台播放声音吗?

应用程序处于后台且静音模式开启时需要播放声音

当应用程序处于后台时播放声音

使用 AVAudioPlayer 在后台播放声音而不停止 ipod 音乐

通知自定义声音在前台播放,但在后台应用程序时不播放

IOS如何在后台播放音乐声音并暂停当前播放的音乐应用程序