2015-05-16 21 views
28

Jak widać przesyłam strumieniowo transmisje audio. Ale gdy naciśniesz przycisk strony głównej i wyjdę z przesyłania strumieniowego aplikacji lub nie słyszę. Jak mogę kontynuować transmisję w tle i słuchać jej na ekranie blokady?Jak odtwarzać dźwięk w tle 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) 
     } 
    } 

Odpowiedz

97

Musisz ustawić swoje możliwości aplikacji Tryby tle (audio i AirPlay) i ustawić kategorię AVAudioSession do AVAudioSessionCategoryPlayback i ustawić ją jako aktywną

Od Xcode 8.2.1 • Swift 3.0.2 począwszy

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

Dzięki _________ –

+0

@ardakaraca Serdecznie zapraszamy –

+2

@LeoDabus gdzie umieścimy ten kod? Dodałem to do delegacji viewDidLoad i aplikacji i to nie zadziałało. Zdezorientowany, gdzie powinien iść? – lukaivicev

Powiązane problemy