如何播放音频在后台斯威夫特? [英] How to Play Audio in Background Swift?
本文介绍了如何播放音频在后台斯威夫特?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
正如你看到我流音频广播。但是,当我preSS home键和退出应用程序流站和我听不到。我如何可以继续在后台流,并从锁屏听呢?
ViewController.Swift
进口的UIKit
进口AVFoundation
进口的MediaPlayer
进口GoogleMobileAds
一流的ViewController:UIViewController的,GADInterstitialDelegate { @IBOutlet弱VAR exitMapButton:UIButton的!
@IBOutlet弱VAR radarMap:UIWebView的!
VAR间质性:的GADInterstitial!
FUNC createAndLoadInterstitial() - > {的GADInterstitial
VAR间质性=的GADInterstitial(adUnitId设置:CA-APP-酒馆2782958552分之5378899862041789)
interstitial.delegate =自
interstitial.loadRequest(的GADRequest())
返回间质性
} GetAd出现FUNC(){
如果(self.interstitial.isReady)
{
self.interstitial。presentFromRootViewController(个体经营)
self.interstitial = self.createAndLoadInterstitial()
}
}
@IBOutlet弱VAR ataturkButton:UIButton的!
@IBOutlet弱VAR sabihaButton:UIButton的!
@IBOutlet弱VAR esenbogaButton:UIButton的!
@IBOutlet弱VAR weatherButton:UIButton的!
@IBOutlet弱VAR statusLabel:的UILabel!
@IBOutlet弱VAR为playButton:UIButton的!
@IBOutlet弱VAR webViewButton:UIButton的!
VAR googleBannerView:GADBannerView的!
覆盖FUNC viewDidLoad中(){
super.viewDidLoad()
}
类PlayerAv {
VAR audioLink:字符串?
VAR球员:AVPlayer
的init(链接:字符串){
self.audioLink =链接
self.player = AVPlayer(网址:NSURL(字符串:链接))
}
}
VAR myPlayer = PlayerAv(链接:http://www.liveatc.net/play/ltba.pls)
变种setTowerState = @IBAction FUNC sliderValueChanged(发件人:UISlider){
VAR CurrentValue的=浮动(sender.value)
的println(CurrentValue的)
myPlayer.player.volume = CurrentValue的
}
@IBAction FUNC getWeatherWindow(发件人:AnyObject){
。UIApplication.sharedApplication()的OpenURL(NSURL(字符串: \"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(定向天气页)
}
@IBAction FUNC changeToAtaturk(){
myPlayer.player.pause()
myPlayer = PlayerAv(链接:http://www.liveatc.net/play/ltba.pls)
myPlayer.audioLink ==
的println(\\(myPlayer.audioLink) - A)
playButton.setTitle(暂停,forState:UIControlState.Normal)
myPlayer.player.play()
setTowerState =阿塔图尔克
statusLabel.text =状态:播放,LTBA
}
@IBAction FUNC changeToEsenboga(){
myPlayer.player.pause()
myPlayer = PlayerAv(链接:http://www.liveatc.net/play/ltac.pls)
的println(\\(myPlayer.audioLink) - A)
playButton.setTitle(暂停,forState:UIControlState.Normal)
myPlayer.player.play()
setTowerState =伯卡
statusLabel.text =状态:播放,LTAC
}
@IBAction FUNC changeToSabiha(){
myPlayer.player.pause()
myPlayer = PlayerAv(链接:http://www.liveatc.net/play/ltfj.pls)
的println(\\(myPlayer.audioLink) - A)
playButton.setTitle(暂停,forState:UIControlState.Normal)
myPlayer.player.play()
setTowerState =萨比哈
statusLabel.text =状态:播放,LTFJ
}
覆盖FUNC didReceiveMemoryWarning(){
super.didReceiveMemoryWarning()
可以重新创建任何资源的处置//。
}
@IBAction FUNC为playButton pressed(发件人:AnyObject){
切换()
}
拨动FUNC(){
如果playButton.titleLabel?==的.text播放{
playRadio()
的println(播放)
statusLabel.text =状态:玩
}其他{
pauseRadio()
的println(暂停)
statusLabel.text =状态:暂停
}
}
FUNC playRadio(){
myPlayer.player.play()
playButton.setTitle(暂停,forState:UIControlState.Normal)
}
FUNC pauseRadio(){
myPlayer.player.pause()
playButton.setTitle(播放,forState:UIControlState.Normal)
}
}
解决方案
您需要设置你的应用程序功能的背景模式(音频和AirPlay)和您AVAudioSession类别设置为AVAudioSessionCategoryPlayback并设置其激活
更新:
{做
尝试AVAudioSession.sharedInstance()。setCategory(AVAudioSessionCategoryPlayback)
打印(AVAudioSession分类播放OK)
做{
尝试AVAudioSession.sharedInstance()。SETACTIVE(真)
打印(AVAudioSession是活动)
}赶上让误差NSError {
打印(error.localizedDescription)
}
}赶上让误差NSError {
打印(error.localizedDescription)
}
As you see I'm streaming an audio broadcast. But when I press the home button and exit the app streaming stops or I cannot hear. How can I continue streaming in background and listen it from lock screen?
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)
}
}
解决方案
You need to set your app Capabilities Background Modes (Audio and AirPlay) and set your AVAudioSession category to AVAudioSessionCategoryPlayback and set it active
Update: Xcode 7.0 (AppStore) • Swift 2.0
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
print("AVAudioSession Category Playback OK")
do {
try AVAudioSession.sharedInstance().setActive(true)
print("AVAudioSession is Active")
} catch let error as NSError {
print(error.localizedDescription)
}
} catch let error as NSError {
print(error.localizedDescription)
}
这篇关于如何播放音频在后台斯威夫特?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文