3

使用 Swift 4+、iOS 11+、Xcode 10+

我已经使用 MPMediaPlayer 构建了一个音乐播放器,我可以从命令中心与它进行交互,但是我希望也能够在锁定屏幕上看到它。

老实说,我对它为什么在命令中心显示/工作感到有点困惑,因为我没有编写任何代码来执行此操作。不过,我也希望它显示在锁定屏幕中。

这是我到目前为止所做的:

1)我正在使用 applicationMusicPlayer 并确定在我的测试期间正在播放一些东西:

MPMusicPlayerController.applicationMusicPlayer

2) 将 BackgroundModes 设置为包括音频、获取和远程通知

在此处输入图像描述

3)添加了 AVAudioSession 代码(它似乎没有做任何事情,因为我已经尝试过并尝试将其注释掉并没有发现任何区别):

  let session = AVAudioSession.sharedInstance()
    do {
        // Configure the audio session for playback
        try session.setCategory(AVAudioSessionCategoryPlayback,
                                mode: AVAudioSessionModeDefault,
                                options: [])
        try session.setActive(true)
    } catch let error as NSError {
        print("Failed to set the audio session category and mode: \(error.localizedDescription)")
    }

4)使用此基本代码查看是否可以仅使用一些基本的硬编码内容将其显示在锁定屏幕上:

let nowPlayingInfo: [String: Any] = [
    MPMediaItemPropertyArtist: "Pink Floyd",
    MPMediaItemPropertyTitle: "Wish You Were Here",
    //MPMediaItemPropertyArtwork: mediaArtwork,
]
MPNowPlayingInfoCenter.default().nowPlayingInfo = nowPlayingInfo

UIApplication.shared.beginReceivingRemoteControlEvents()
let commandCenter = MPRemoteCommandCenter.shared()

5) 我知道我没有实施任何主动更新信息或响应任何命令的操作,因为此时我只是想在锁定屏幕上显示一些内容。

如果我没有做任何操作,为什么现在正在播放的信息显示在指挥中心?

我需要做什么才能让信息像在命令中心中一样显示在锁定屏幕上?

编辑:链接到在 GitLab 上有相同问题的简单项目:https ://gitlab.com/whoit/lockscreentest

编辑:我已将此作为错误提交给 Apple,但他们尚未确认或解决此问题。

4

2 回答 2

0

我必须填写(即使是空字符串)至少 4 个键才能在锁定屏幕上看到正确的内容:

  • MPMediaItemPropertyTitle
  • MPMediaItemPropertyArtist
  • MPMediaItemPropertyAlbumTitle
  • MPNowPlayingInfoPropertyPlaybackRate

您可以查看此NowPlayingSource 代码源

于 2019-01-13T17:29:51.217 回答
0

使用.systemMusicPlayer代替.applicationMusicPlayer将解决您的问题。

作为苹果文件:

音乐播放器不会影响音乐应用程序的状态。当您的应用程序移至后台时,音乐播放器将停止播放当前媒体。

我认为这与未在锁定屏幕中显示有关。

并且还systemMusicPlayer处理所有歌曲信息以自动显示。

于 2019-02-18T22:32:40.797 回答