如何在tvOS遥控器上检测音量按钮按下

3

我正在寻找一种方法来观察播放器,以便在用户增加或减少苹果电视的音量时检测到。我已经成功地使用以下方法在iOS上实现了这一点:


 var audioSession: AVAudioSession?

 audioSession?.addObserver(self, forKeyPath: "outputVolume", options: [.new], context: &videoPlayerViewControllerKVOContext)


 if keyPath == "outputVolume" {
        guard let mute = (change?[NSKeyValueChangeKey.newKey] as? NSNumber)?.floatValue else {
            return
        }
        
        var isMuted = false
        
        if (mute == 0) && (!player.isMuted) {
            isMuted = true
        } else if (mute.isZero) && (player.isMuted) {
            isMuted = false
        }
        
    }

然而这种方法在tvOS上不起作用。是否有办法在tvOS上实现此功能?

1个回答

1

虽然其他代码不是很清楚,但你必须保留对创建的观察者的引用。

以下是可能的解决方案(已在Xcode 12.1上测试)

private var observer: NSKeyValueObservation?

// ... other code

self.observer = audioSession?.observe(\.outputVolume) { [weak self] (audioSession, _) in
    guard let `self` = self else { return }
    let mute = audioSession.outputVolume
    
    var isMuted = false
    if (mute == 0) && (!self.player.isMuted) {
        isMuted = true
    } else if (mute.isZero) && (self.player.isMuted) {
        isMuted = false
    }
    
    // do what's needed here with `isMuted`
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接