2015-05-16 25 views
28

Như bạn thấy tôi đang phát một chương trình phát sóng âm thanh. Nhưng khi tôi bấm nút Home và thoát khỏi các ứng dụng streaming dừng lại hoặc tôi không thể nghe thấy. Làm thế nào tôi có thể tiếp tục phát trực tiếp ở chế độ nền và nghe từ màn hình khóa?Làm thế nào để phát âm thanh trong nền Swift?

ViewController.Swift

import UIKit 
import AVFoundation 
import MediaPlayer 
import GoogleMobileAds 


    class ViewController: UIViewController, GADInterstitialDelegate { 

     @IBOutlet weak var exitMapButton: UIButton! 
     @IBOutlet weak var radarMap: UIWebView! 
     var interstitial: GADInterstitial! 
     func createAndLoadInterstitial() -> GADInterstitial { 
      var interstitial = GADInterstitial(adUnitID: "ca-app-pub-5378899862041789/2782958552") 
      interstitial.delegate = self 
      interstitial.loadRequest(GADRequest()) 
      return interstitial 
     } 

     func getAd(){ 
      if (self.interstitial.isReady) 
      { 
       self.interstitial.presentFromRootViewController(self) 
       self.interstitial = self.createAndLoadInterstitial() 
      } 
     } 
     @IBOutlet weak var ataturkButton: UIButton! 
     @IBOutlet weak var sabihaButton: UIButton! 
     @IBOutlet weak var esenbogaButton: UIButton! 
     @IBOutlet weak var weatherButton: UIButton! 
     @IBOutlet weak var statusLabel: UILabel! 
     @IBOutlet weak var playButton: UIButton! 
     @IBOutlet weak var webViewButton: UIButton! 
     var googleBannerView: GADBannerView! 
override func viewDidLoad() { 
      super.viewDidLoad() 
     } 
class PlayerAv { 
      var audioLink: String? 
      var player: AVPlayer 
      init(link: String) { 
       self.audioLink = link 
       self.player = AVPlayer(URL: NSURL(string: link)) 
      } 
     } 
     var myPlayer = PlayerAv(link: "http://www.liveatc.net/play/ltba.pls") 
     var setTowerState = "" 

     @IBAction func sliderValueChanged(sender: UISlider) { 
      var currentValue = Float(sender.value) 
      println(currentValue) 
      myPlayer.player.volume = currentValue 
     } 
     @IBAction func getWeatherWindow(sender: AnyObject) { 
      UIApplication.sharedApplication().openURL(NSURL(string: "http://www.aviationweather.gov/adds/metars/?station_ids=ltac&std_trans=standard&chk_metars=on&hoursStr=most+recent+only&chk_tafs=on&submitmet=Submit")!) 
      println("Directed to weather page") 
     } 
     @IBAction func changeToAtaturk() { 
      myPlayer.player.pause() 
      myPlayer = PlayerAv(link: "http://www.liveatc.net/play/ltba.pls") 
      myPlayer.audioLink == "" 
      println("\(myPlayer.audioLink!)--a") 
      playButton.setTitle("Pause", forState: UIControlState.Normal) 
      myPlayer.player.play() 
      setTowerState = "ataturk" 
      statusLabel.text = "Status: Playing, LTBA" 
     } 
     @IBAction func changeToEsenboga() { 
      myPlayer.player.pause() 
      myPlayer = PlayerAv(link: "http://www.liveatc.net/play/ltac.pls") 
      println("\(myPlayer.audioLink!)--a") 
      playButton.setTitle("Pause", forState: UIControlState.Normal) 
      myPlayer.player.play() 
      setTowerState = "esenboga" 
      statusLabel.text = "Status: Playing, LTAC" 
     } 
     @IBAction func changeToSabiha() { 
      myPlayer.player.pause() 
      myPlayer = PlayerAv(link: "http://www.liveatc.net/play/ltfj.pls") 
      println("\(myPlayer.audioLink!)--a") 
      playButton.setTitle("Pause", forState: UIControlState.Normal) 
      myPlayer.player.play() 
      setTowerState = "sabiha" 
      statusLabel.text = "Status: Playing, LTFJ" 
     } 
     override func didReceiveMemoryWarning() { 
      super.didReceiveMemoryWarning() 
      // Dispose of any resources that can be recreated. 
     } 
     @IBAction func playButtonPressed(sender: AnyObject) { 
      toggle() 
     } 
     func toggle() { 
      if playButton.titleLabel?.text == "Play" { 
       playRadio() 
       println("Playing") 
       statusLabel.text = "Status: Playing" 
      } else { 
       pauseRadio() 
       println("Paused") 
       statusLabel.text = "Status: Paused" 
      } 
     } 
     func playRadio() { 
      myPlayer.player.play() 
      playButton.setTitle("Pause", forState: UIControlState.Normal) 
     } 
     func pauseRadio() { 
      myPlayer.player.pause() 
      playButton.setTitle("Play", forState: UIControlState.Normal) 
     } 
    } 

Trả lời

97

Bạn cần phải thiết lập khả năng ứng dụng của bạn chế độ nền (Audio và AirPlay) và thiết lập mục AVAudioSession của bạn để AVAudioSessionCategoryPlayback và đặt nó hoạt động

Từ Xcode 8.2.1 • Swift 3.0.2 trở đi

do { 
    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: .mixWithOthers) 
    print("Playback OK") 
    try AVAudioSession.sharedInstance().setActive(true) 
    print("Session is Active") 
} catch { 
    print(error) 
} 

enter image description here

+0

Cảm ơn _________ –

+0

@ardakaraca Bạn được chào đón –

+2

@LeoDabus chúng tôi đặt mã đó ở đâu? Tôi đã thêm rằng đối với viewDidLoad và ủy nhiệm ứng dụng và nó không hoạt động. Bối rối là nơi nó nên đi đâu? – lukaivicev

Các vấn đề liên quan