小编典典

检测音量按钮按下

swift

未调用音量按钮通知功能。

码:

func listenVolumeButton(){
    // Option #1
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "volumeChanged:", name: "AVSystemController_SystemVolumeDidChangeNotification", object: nil)
    // Option #2
    var audioSession = AVAudioSession()
    audioSession.setActive(true, error: nil)
    audioSession.addObserver(self, forKeyPath: "volumeChanged", options: NSKeyValueObservingOptions.New, context: nil)
}

override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer<Void>) {
    if keyPath == "volumeChanged"{
        print("got in here")
    }
}

func volumeChanged(notification: NSNotification){
   print("got in here")
}

listenVolumeButton() 在viewWillAppear中被调用

"got in here"无论哪种情况,代码都不会到达print语句。

我正在尝试两种不同的方法来做到这一点,但都没有用。

我已遵循以下步骤:检测iPhone的音量按钮按下了吗?


阅读 258

收藏
2020-07-07

共1个答案

小编典典

使用第二种方法,密钥路径的值应为"outputVolume"。那就是我们正在观察的财产。因此将代码更改为

var outputVolumeObserve: NSKeyValueObservation?
let audioSession = AVAudioSession.sharedInstance()

func listenVolumeButton() {
    do {
        try audioSession.setActive(true)
    } catch {}

    outputVolumeObserve = audioSession.observe(\.outputVolume) { (audioSession, changes) in
        /// TODOs
    }
}
2020-07-07