问题描述
我已经创建了一个用于播放来自URL的广播流的应用程序,它在后台运行时正在播放音频,但是在锁定屏幕上没有控制器-我只想要一个应用程序名称和播放/暂停按钮。我在应用程序设置的背景模式下检查了音频和播放。有任何想法吗?预先感谢您的帮助。这是我的代码:
import UIKit
import AVKit
class ViewController: UIViewController {
var player : AVPlayer!
var dict = NSDictionary()
//@IBOutlet weak var ArtistLabel: UILabel!
@IBAction func playButtonpressed(_ sender: UIButton){
let url = "https://radiopromil.online/radio/8000/radio.mp3"
do {
try AVAudioSession.sharedInstance().setCategory(.playback,mode: .default,options: [.mixWithOthers,.allowAirPlay])
print("Playback OK")
try AVAudioSession.sharedInstance().setActive(true)
print("Session is Active")
} catch {
print(error)
}
player = AVPlayer(url: URL(string: url)!)
player.volume = 1.0
player.rate = 1.0
player.play()
}
@IBAction func stopButtonStopped(sender: UIButton) {
player.pause()
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
overrideUserInterfaceStyle = .light
}
}
解决方法
您需要导入Media Player,然后进行设置
import UIKit
import AVKit
import MediaPlayer
class ViewController: UIViewController {
var player : AVPlayer!
var dict = NSDictionary()
//@IBOutlet weak var ArtistLabel: UILabel!
@IBAction func playButtonPressed(_ sender: UIButton){
let url = "https://radiopromil.online/radio/8000/radio.mp3"
do {
try AVAudioSession.sharedInstance().setCategory(.playback,mode:
.default,options: [.mixWithOthers,.allowAirPlay])
print("Playback OK")
try AVAudioSession.sharedInstance().setActive(true)
print("Session is Active")
} catch {
print(error)
}
player = AVPlayer(url: URL(string: url)!)
player.volume = 1.0
player.rate = 1.0
player.play()
}
@IBAction func stopButtonStopped(sender: UIButton) {
player.pause()
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
overrideUserInterfaceStyle = .light
setupRemoteCommandCenter()
}
func setupRemoteCommandCenter() {
// Get the shared MPRemoteCommandCenter
let commandCenter = MPRemoteCommandCenter.shared()
// Add handler for Play Command
commandCenter.playCommand.addTarget { event in
return .success
}
// Add handler for Pause Command
commandCenter.pauseCommand.addTarget { event in
return .success
}
// Add handler for Next Command
commandCenter.nextTrackCommand.addTarget { event in
return .success
}
// Add handler for Previous Command
commandCenter.previousTrackCommand.addTarget { event in
return .success
}
}
}
这应该可以解决问题