Swift 2.0 在后台模式下在应用程序委托中播放自定义声音

Posted

技术标签:

【中文标题】Swift 2.0 在后台模式下在应用程序委托中播放自定义声音【英文标题】:Swift 2.0 Playing custom sound in app delegate while in background mode 【发布时间】:2015-11-16 10:57:09 【问题描述】:

我正在使用 Google Cloud 消息传递将通知推送到我用 Swift 2.0 xCode 7.1 编写的 ios 应用程序。 GCM 不允许自定义通知声音。 见这里:https://developers.google.com/cloud-messaging/http-server-ref

所以我关闭了默认声音,并尝试在调用“didReceiveRemoteNotification”时播放声音。我的问题是在后台模式下没有播放声音。但是如果我将代码(下面)放在“didFinishLaunchingWithOptions”中,它可以完美地工作,只是在我想要它播放的时候不行。 我在 info.plist 中添加了更多背景。就像我说的那样,它只是在推送通知到达时才起作用。

    let alertSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("GMNotification", ofType: "wav")!)
    print(alertSound)

    //var error:NSError?
    do 
        try self.audioPlayer = AVAudioPlayer(contentsOfURL: alertSound, fileTypeHint:nil)
        self.audioPlayer.prepareToPlay()
        self.audioPlayer.play()
        print("PLAY !!!")
     catch 
        print("Error ???")
    

有人可以帮忙吗?

【问题讨论】:

要在后台模式下播放音乐,您需要在 Info-Plist-Background-modes 中注册为音乐应用程序。 嗨克里斯蒂安,我已经从我的信息列表中添加了我的背景模式。 也许这个***.com/questions/16232315/… 可以帮助你。 你解决了这个问题吗?我面临同样的问题。解决方案应该是自定义通知然后显示它,但我不知道如何快速做到这一点(我在 android tho' 中取得了成功)。 【参考方案1】:

您必须创建一个共享实例“Singelton”才能播放声音。返回参考:

Swift - AVAudioPlayer, sound doesn't play correctly

这应该告诉你如何做到这一点

【讨论】:

以上是关于Swift 2.0 在后台模式下在应用程序委托中播放自定义声音的主要内容,如果未能解决你的问题,请参考以下文章

Swift互用性:采用Cocoa设计模式(Swift 2.0版)-b

Swift URLSession DataTask 在应用程序进入后台时失败

应用程序在后台运行时发送本地通知 Swift 2.0

在后台永远运行Swift 2.0应用程序以更新服务器的位置

如果应用程序处于后台模式,则为推送通知调用啥委托

UILocalNotifcation 未在 swift 2.0 中触发