Я создал класс для управления настройкой событий дистанционного управления.Все операторы print печатаются в теле функций, но события никогда не вызываются.Также метаданные никогда не отображаются ни на экране блокировки, ни в командном центре.Я вызываю UIApplication.shared.beginReceivingRemoteControlEvents()
в приложении-делегате didFinishLaunching.Может кто-нибудь объяснить, почему данные не отображаются и почему не работают элементы управления?Аудио сеанс также установлен на .playback
class RemoteControlsHelper {
static let instance = RemoteControlsHelper()
var currentPodcast = Podcast()
var player = AVAudioPlayer()
func setupRemoteTransportControls() {
// Get the shared MPRemoteCommandCenter
print("setting up commands")
let commandCenter = MPRemoteCommandCenter.shared()
commandCenter.playCommand.isEnabled = true
commandCenter.pauseCommand.isEnabled = true
// Add handler for Play Command
commandCenter.playCommand.addTarget { (event) -> MPRemoteCommandHandlerStatus in
if self.player.rate == 0.0 {
self.player.play()
print("s")
return .success
}
print("f")
return .commandFailed
}
// Add handler for Pause Command
commandCenter.pauseCommand.addTarget { (event) -> MPRemoteCommandHandlerStatus in
if self.player.rate == 1.0 {
self.player.pause()
print("s")
return .success
}
print("f")
return .commandFailed
}
}
func setupNowPlaying(img: UIImage?) {
print("setting data")
// Define Now Playing Info
var nowPlayingInfo = [String : Any]()
nowPlayingInfo[MPMediaItemPropertyTitle] = self.currentPodcast.title
nowPlayingInfo[MPMediaItemPropertyArtist] = self.currentPodcast.author
print(self.currentPodcast.title)
if let image = img {
nowPlayingInfo[MPMediaItemPropertyArtwork] =
MPMediaItemArtwork(boundsSize: image.size) { size in
return image
}
}
print("continuing")
//nowPlayingInfo[MPNowPlayingInfoPropertyElapsedPlaybackTime] = self.player.currentTime
//nowPlayingInfo[MPMediaItemPropertyPlaybackDuration] = self.player.duration
//nowPlayingInfo[MPNowPlayingInfoPropertyPlaybackRate] = self.player.rate
// Set the metadata
MPNowPlayingInfoCenter.default().nowPlayingInfo = nowPlayingInfo
}
@objc func toggleAudio() {
if self.player.isPlaying {
self.player.pause()
} else {
self.player.play()
}
}
}