2017-03-08 39 views
0

我需要編寫iOS應用程序,通過在iPhone或iPad上按上音量鍵來倒計時。因此,我使用了一些來自這裏的建議來使用AVAudioSession並觀察「outputVolume」鍵。Swift:從後臺返回後使用音量按鈕不起作用

在這裏,你可以找到我的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) 
} 
} 

一切正常,因爲它應該在啓動應用程序在第一次之後。當我現在按下主頁按鈕並返回到應用程序時,按下音量按鈕的事件不會被捕獲,並且MPVolumeWindow會再次顯示。

有人可以幫我解決這個問題嗎?

問候 阿明

回答

1

當你從在後臺背,音頻會話不再有效。你需要再次激活它。

+0

我想通過在ViewWillAppear中調用listenVolumeButton()和removeVolumeView()來完成此操作。這是不是這樣工作?當DidBecomeActive被調用時,我是否必須在AppDelegate中執行此操作? – Armin

+0

「viewWillAppear」不會因爲您的應用在非活動狀態後變爲活動狀態而被調用。 – matt

+0

重新激活AppDelegate(willBecomeActive)中的AudioSession解決了這個問題。非常感謝你! – Armin