我无法从锁定屏幕控制我的音频应用

问题描述

我已经创建了一个用于播放来自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
    }
}



}

这应该可以解决问题