AVAudioSession并不尊重mixWithOthers

时间:2018-05-19 12:40:02

标签: ios swift avfoundation avaudiosession

我正在尝试构建一个闹钟应用。要在应用程序处于后台时播放闹钟,我的应用程序会播放一个完全无声的声音(但是我听到一声安静的声音,尽管如果我在电脑上播放相同的声音文件,肯定没有什么可听的)背景,直到闹钟时间到来,AVPlayer播放闹钟声。它可以工作,但是当我的应用程序在后台播放静音时,其他一些应用程序(尤其是某些游戏)不会发出声音。这有点奇怪,因为有应用程序' Alarmy'在AppStore中,它肯定使用相同的系统和无声的声音,但当我在这个应用程序中设置闹钟时,它不会使任何其他声音静音。

我怎样才能做到这一点?目前我正在设置我的AVAudioSession(我在我的闹钟播放器类的初始化器中设置它,我的AppDelegate中有一个实例):

let session = AVAudioSession.sharedInstance()
do {
    try session.setCategory(AVAudioSessionCategoryPlayback, with: .mixWithOthers)
    try session.setActive(true)
} catch {
    print("Failed to set audio session category.  Error: \(error)")
}

修改 有关应用程序Alarmy的更多说明,请同时查看App "Alarmy" is able to play iTunes song from background state... How?

1 个答案:

答案 0 :(得分:0)

“要在应用程序处于后台时播放闹钟,我的应用会发出完全无声的声音。”你的意思是你试图用沉默来保持你的应用程序活着吗?这是不允许的。如果您发现其他应用程序执行此操作(您如何知道他们这样做?),这并不意味着它是允许的。事实上,某人已经离开了某些东西并没有改变AppStore规则(并没有改变无声音频是主要电池消耗的事实)。

构建在特定时间启动以发出警报的应用的正确方法是使用UNNotificationRequest。您可以注册通知以在给定的日期和时间唤醒您,然后您可以执行警报,或者(通常更好)让通知处理警报而不会唤醒您,直到用户点击消息。 / p>

有关详细信息,请参阅Local and Remote Notification Programming Guide