未调用音量按钮通知功能。
码:
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中被调用
listenVolumeButton()
"got in here"无论哪种情况,代码都不会到达print语句。
"got in here"
我正在尝试两种不同的方法来做到这一点,但都没有用。
我已遵循以下步骤:检测iPhone的音量按钮按下了吗?
使用第二种方法,密钥路径的值应为"outputVolume"。那就是我们正在观察的财产。因此将代码更改为
"outputVolume"
var outputVolumeObserve: NSKeyValueObservation? let audioSession = AVAudioSession.sharedInstance() func listenVolumeButton() { do { try audioSession.setActive(true) } catch {} outputVolumeObserve = audioSession.observe(\.outputVolume) { (audioSession, changes) in /// TODOs } }