iPhone 上未显示音频播放锁屏控件
Audio playback lock screen controls not displaying on iPhone
我正在我的实际 iPhone 6s 设备上使用 iOS 10.2 对此进行测试。
我正在播放流式音频并且能够 play/pause 音频、跳过曲目等。我还启用了后台模式,音频在后台播放并继续正确播放播放列表。我遇到的唯一问题是让锁屏控件显示出来。什么都不显示...
在我的 MainViewController 的 viewDidLoad() 中,就在我的应用程序启动时,我称之为...
func setupAudioSession(){
UIApplication.shared.beginReceivingRemoteControlEvents()
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: AVAudioSessionCategoryOptions.mixWithOthers)
self.becomeFirstResponder()
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)
}
}
然后在我的 AudioPlayer class 中开始播放音频后,我调用 ...
func setupLockScreen(){
let commandCenter = MPRemoteCommandCenter.shared()
commandCenter.nextTrackCommand.isEnabled = true
commandCenter.nextTrackCommand.addTarget(self, action:#selector(skipTrack))
MPNowPlayingInfoCenter.default().nowPlayingInfo = [MPMediaItemPropertyTitle: "TESTING"]
}
当我锁定 iPhone 然后再次点击电源按钮进入锁定屏幕时,音频控件根本不显示。就好像没有播放音频,我只看到我的正常背景照片。控制面板中也没有显示控件(在主屏幕上向上滑动,然后向左滑动到音乐控件应位于的位置)。
问题是因为我没有使用 AVAudioPlayer 或 AVPlayer 吗?但是,例如,Spotify 如何使用他们自己的自定义音频播放器来显示锁屏控件?感谢您的任何建议/帮助
是的,要使锁定屏幕正常工作,您需要使用 iOS API 来播放音频。不确定 Spotify 是如何做到的,但他们可能为此目的并行使用第二个音频会话,并使用控件来控制两者。您的后台处理程序(在我的例子中是单例)可以在第二个音频进入后台时以 0 音量开始播放,并在前台停止播放。我自己没有测试过,但可以尝试一下。
原来是这一行的问题...
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: AVAudioSessionCategoryOptions.duckOthers)
一旦我将其更改为
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: [])
一切正常。因此,似乎为 AVAudioSessionCategoryPlaybackOptions 传递任何参数都会导致锁屏控件不显示。我还尝试传入 .mixWithOthers
,这也导致锁屏控件无法显示
在Swift 4.这个例子只是为了在锁定屏幕上显示播放器并且适用于iOS 11.要知道如何在设备上播放auidio,你可以关注这个线程
import MediaPlayer
import AVFoundation
声明玩家
var player : AVPlayer?
现在创建一个函数
func setupLockScreen(){
let commandCenter = MPRemoteCommandCenter.shared()
commandCenter.nextTrackCommand.isEnabled = true
commandCenter.togglePlayPauseCommand.addTarget(self, action: #selector(controlPause))
MPNowPlayingInfoCenter.default().nowPlayingInfo = [MPMediaItemPropertyTitle: currentStation]
}
现在创建一个函数来控制播放和暂停事件。我创建了一个 BOOL "isPlaying" 来确定播放器的状态。
@objc func controlPause() {
if isPlaying == true {
player?.pause()
isPlaying = false
} else {
player?.play()
isPlaying = true
}
}
准备就绪。现在播放器会显示在锁屏界面
我正在我的实际 iPhone 6s 设备上使用 iOS 10.2 对此进行测试。
我正在播放流式音频并且能够 play/pause 音频、跳过曲目等。我还启用了后台模式,音频在后台播放并继续正确播放播放列表。我遇到的唯一问题是让锁屏控件显示出来。什么都不显示...
在我的 MainViewController 的 viewDidLoad() 中,就在我的应用程序启动时,我称之为...
func setupAudioSession(){
UIApplication.shared.beginReceivingRemoteControlEvents()
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: AVAudioSessionCategoryOptions.mixWithOthers)
self.becomeFirstResponder()
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)
}
}
然后在我的 AudioPlayer class 中开始播放音频后,我调用 ...
func setupLockScreen(){
let commandCenter = MPRemoteCommandCenter.shared()
commandCenter.nextTrackCommand.isEnabled = true
commandCenter.nextTrackCommand.addTarget(self, action:#selector(skipTrack))
MPNowPlayingInfoCenter.default().nowPlayingInfo = [MPMediaItemPropertyTitle: "TESTING"]
}
当我锁定 iPhone 然后再次点击电源按钮进入锁定屏幕时,音频控件根本不显示。就好像没有播放音频,我只看到我的正常背景照片。控制面板中也没有显示控件(在主屏幕上向上滑动,然后向左滑动到音乐控件应位于的位置)。
问题是因为我没有使用 AVAudioPlayer 或 AVPlayer 吗?但是,例如,Spotify 如何使用他们自己的自定义音频播放器来显示锁屏控件?感谢您的任何建议/帮助
是的,要使锁定屏幕正常工作,您需要使用 iOS API 来播放音频。不确定 Spotify 是如何做到的,但他们可能为此目的并行使用第二个音频会话,并使用控件来控制两者。您的后台处理程序(在我的例子中是单例)可以在第二个音频进入后台时以 0 音量开始播放,并在前台停止播放。我自己没有测试过,但可以尝试一下。
原来是这一行的问题...
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: AVAudioSessionCategoryOptions.duckOthers)
一旦我将其更改为
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: [])
一切正常。因此,似乎为 AVAudioSessionCategoryPlaybackOptions 传递任何参数都会导致锁屏控件不显示。我还尝试传入 .mixWithOthers
,这也导致锁屏控件无法显示
在Swift 4.这个例子只是为了在锁定屏幕上显示播放器并且适用于iOS 11.要知道如何在设备上播放auidio,你可以关注这个线程
import MediaPlayer
import AVFoundation
声明玩家
var player : AVPlayer?
现在创建一个函数
func setupLockScreen(){
let commandCenter = MPRemoteCommandCenter.shared()
commandCenter.nextTrackCommand.isEnabled = true
commandCenter.togglePlayPauseCommand.addTarget(self, action: #selector(controlPause))
MPNowPlayingInfoCenter.default().nowPlayingInfo = [MPMediaItemPropertyTitle: currentStation]
}
现在创建一个函数来控制播放和暂停事件。我创建了一个 BOOL "isPlaying" 来确定播放器的状态。
@objc func controlPause() {
if isPlaying == true {
player?.pause()
isPlaying = false
} else {
player?.play()
isPlaying = true
}
}
准备就绪。现在播放器会显示在锁屏界面