Swift 3 如何覆盖静音模式并从后台播放音频

Posted

技术标签:

【中文标题】Swift 3 如何覆盖静音模式并从后台播放音频【英文标题】:Swift 3 how to override silent mode and play audio from background 【发布时间】:2017-02-17 11:46:30 【问题描述】:

我正在尝试编写一个类似于电话查找器但具有完全不同的用法和调用渠道的应用程序。我能够获取用户的位置并进行背景获取,但我正在努力解决的问题是大声播放声音(即使手机静音),以便在用户在家中丢失手机时找到用户的手机。在 android 上一切都很容易,我也想在 ios 上复制它。当应用程序从前台切换到后台时,我可以播放声音:

func setupAudio()
        print("Trying to play audio")
        guard let sound = NSDataAsset(name: "FeelinGood") else 
            print("asset not found")
            return
        


        do 
            try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
            try AVAudioSession.sharedInstance().setActive(true)

            audioPlayer = try AVAudioPlayer(data: sound.data, fileTypeHint: AVFileTypeMPEGLayer3)

                audioPlayer.play()


         catch let error as NSError 
            print("error: \(error.localizedDescription)")
        


    

但是当我在收到远程通知时尝试调用该方法时,这不起作用。我可以通过远程通知来使用我的应用程序并能够播放自定义声音,但这仅在手机未处于静音模式时才有效。

应用商店中有很多应用都覆盖了静音模式,所以我很确定有办法做到这一点,但我还不确定如何。

【问题讨论】:

【参考方案1】:

谢谢,现在一切正常。 @zombie 回答你的问题是的,我确实启用了后台模式和音频,因为没有它我无法让后台获取工作或在应用程序进入后台时播放音频。

我的问题是我设置了两次 AudioSession。一次是在 Launch 上,一次是在我收到远程通知时。一旦我从启动中删除它,它就开始工作了。来自 java 背景,我的印象是我只是在重新初始化一个对象。显然不是。不过,如果有人能对此有所了解,那将会很有帮助。

【讨论】:

【参考方案2】:

您是否尝试设置播放器的音量

audioPlayer.volume = 1

别忘了开启后台模式

【讨论】:

谢谢僵尸。但我对音频播放器的问题是,当应用程序完全处于后台时,我什至无法播放它。因此,当应用程序处于后台并且屏幕锁定时,它不起作用。在这种状态下,我得到了警报,但我无法覆盖静音。 带警报的意思是本地通知,自定义旋律为 30 秒 您是否启用了上述背景模式

以上是关于Swift 3 如何覆盖静音模式并从后台播放音频的主要内容,如果未能解决你的问题,请参考以下文章

快速以静音模式播放警报

如何在 iPod 仍在播放音频时将 iOS 上的视频静音?

使用 AVPlayer 时防止背景音频静音

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

iOS swift流媒体应用程序不在后台模式下播放音乐

Swift 3:如何在使用 AVFoundation 录制视频期间将麦克风静音/取消静音