我需要编写一个iOS应用程序,通过按iPhone或iPad上的Up Volume Key来倒计时。因此我从这里使用了一些建议来使用AVAudioSession并观察“outputVolume”键。
在这里你可以找到我的ViewController的代码:
import UIKit
import MediaPlayer
class ViewController: UIViewController, UIPopoverPresentationControllerDelegate {
@IBOutlet weak var chickenLabel: UILabel!
let audioSession = AVAudioSession.sharedInstance()
var maxHendl:Int = 100
var istHendl:Int = 100
var isVolumeChanged = false
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillAppear(_ animated: Bool) {
listenVolumeButton()
removeVolumeView()
}
func listenVolumeButton() {
do {
try audioSession.setActive(true)
}
catch {
print(error.localizedDescription)
}
audioSession.addObserver(self, forKeyPath: "outputVolume", options: .new, context: nil)
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == "outputVolume" {
if isVolumeChanged == false {
// Set Volume to 50%
MPVolumeView().subviews.filter{NSStringFromClass($0.classForCoder) == "MPVolumeSlider"}.first as? UISlider)?.setValue(0.5, animated: false)
//do some Counting
}
}
}
func removeVolumeView() {
let volumeView: MPVolumeView = MPVolumeView(frame: CGRect.zero)
view.addSubview(volumeView)
}
}
第一次启动App后,一切正常。当我现在按下主页按钮并返回到应用程序时,不会捕获按下音量按钮的事件,并且会再次显示MPVolumeWindow。
有人可以帮我解决这个问题吗?
此致 阿明
答案 0 :(得分:2)
当您从后台回来时,您的音频会话不再有效。你需要再次激活它。