无法在iOS锁定屏幕上显示播放器控件

时间:2018-01-03 03:19:46

标签: ios swift audio

我在锁定屏幕(iOS 11.2)上显示播放器控件存在问题。我已经完成的工作如下:

在AppDelegate.swift中我初始化了AVAudioSession:

import MediaPlayer

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    UIApplication.shared.beginReceivingRemoteControlEvents()
    do {
      try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
      try AVAudioSession.sharedInstance().setActive(true)
    } catch {
    }
    return true
  }
}

然后我的应用程序包含一个包含多个视图的TabHostController。其中一个是音频选项卡。在那里,我尝试处理远程按钮:

import UIKit
import Foundation
import MediaPlayer

class AudioTabViewController: UIViewController {
  override func viewDidLoad() {
    super.viewDidLoad()

    let commandCenter = MPRemoteCommandCenter.shared()
    commandCenter.playCommand.addTarget { (event) -> MPRemoteCommandHandlerStatus in
      self.audioPlayClicked()
      return .success
    }
    commandCenter.pauseCommand.addTarget { (event) -> MPRemoteCommandHandlerStatus in
      self.audioPauseClicked()
      return .success
    }
    commandCenter.stopCommand.addTarget { (event) -> MPRemoteCommandHandlerStatus in
      self.audioStopClicked()
      return .success
    }
  }
}

最后我将背景模式添加到Info.plist:

<key>UIBackgroundModes</key>
<array>
  <string>audio</string>
</array>

会发生什么?我可以毫无问题地构建项目并在iPhone 8上运行。我的音乐播放 但锁定屏幕上没有音频控件(屏幕为空) 如果我查看iOS控制中心,然后我找到一些音频控件,但是点击那里的播放按钮,只播放Apple的音乐应用程序,我之前使用过它。
所以我认为我的应用程序不是系统范围内的#34;已注册&#34;作为当前的音频播放器。

1 个答案:

答案 0 :(得分:4)

我不知道你解决了这个问题,但也许有人有问题,这篇文章可以帮助他们。

我有同样的问题和

我终于找到了问题,

当我设置AVAudioSession时,我正在使用此行 - &gt; 试试

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: AVAudioSessionCategoryOptions.duckOthers)

一旦我将该行更改为以下内容,锁定屏幕控件显示并正常工作 - &gt;

try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: [])

所以我猜问题是传递AVAudioSessionCategoryPlaybackOptions的参数。我尝试传入.duckOthers和.mixWithOthers,在这两种情况下都会导致锁定屏幕控件根本无法显示