2017-03-08 11 views
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が再び表示されます。

誰かがこの問題の解決に手伝ってもらえますか?よろしく アーミン

答えて

1

あなたが戻って、バックグラウンドであることから来る

は、あなたのオーディオセッションはもはやアクティブではありません。再度アクティブにする必要があります。

+0

私はこれを、ViewWillAppearのlistenVolumeButton()とremoveVolumeView()を呼び出すことで行うと考えました。これはこの方法では機能しませんか? DidBecomeActiveが呼び出されたときにAppDelegateでこれを行う必要がありますか? – Armin

+0

'viewWillAppear'は、あなたのアプリが非アクティブになってからアクティブになったために呼び出されません。 – matt

+0

AppDelegate(willBecomeActive)でAudioSessionを再アクティブ化すると問題が解決しました。どうもありがとうございました! – Armin

関連する問題