0
iPhoneまたはiPadでアップボリュームキーを押してカウントダウンするiOSアプリケーションを作成する必要がありました。したがって、ここから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が再び表示されます。
誰かがこの問題の解決に手伝ってもらえますか?よろしく アーミン
私はこれを、ViewWillAppearのlistenVolumeButton()とremoveVolumeView()を呼び出すことで行うと考えました。これはこの方法では機能しませんか? DidBecomeActiveが呼び出されたときにAppDelegateでこれを行う必要がありますか? – Armin
'viewWillAppear'は、あなたのアプリが非アクティブになってからアクティブになったために呼び出されません。 – matt
AppDelegate(willBecomeActive)でAudioSessionを再アクティブ化すると問題が解決しました。どうもありがとうございました! – Armin