如何播放背景Swift中的audio?
正如你所看到的,我正在播放一个audio广播。 但是,当我按主页button,并退出应用程序stream停止或我听不到。 如何在后台继续stream式传输并从locking屏幕上收听?
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) } }
您需要设置您的应用function背景模式(audio和AirPlay),并将您的AVAudioSession类别设置为AVAudioSessionCategoryPlayback并将其设置为活动
Xcode 8.2.1•Swift 3.0.2
do { try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: .mixWithOthers) print("AVAudioSession Category Playback OK") do { try AVAudioSession.sharedInstance().setActive(true) print("AVAudioSession is Active") } catch { print(error) } } catch { print(error) }