Быстрый способ потерять элементы управления экрана блокировки - сделать ваш аудио сеанс смешиваемым ( без деактивации вашего аудио сеанса):
try! AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: .mixWithOthers)
Удалите .mixWithOthers
, когда хотитеих обратно.
Другой, возможно, более приемлемый способ - удалить ваши MPRemoteCommandCenter
цели, как только вы приостановите воспроизведение.например, если вы установите его так:
var playTarget: Any? = nil
var pauseTarget: Any? = nil
func addRemoteTargets() {
let commandCenter = MPRemoteCommandCenter.shared()
playTarget = commandCenter.playCommand.addTarget { (event) -> MPRemoteCommandHandlerStatus in
print("play \(event)")
return .success
}
pauseTarget = commandCenter.pauseCommand.addTarget { (event) -> MPRemoteCommandHandlerStatus in
print("pause \(event)")
return .success
}
}
Затем удалите цели следующим образом:
func removeRemoteTargets() {
let commandCenter = MPRemoteCommandCenter.shared()
commandCenter.playCommand.removeTarget(playTarget)
playTarget = nil
commandCenter.pauseCommand.removeTarget(pauseTarget)
pauseTarget = nil
}
ps это "похоже, работает!"ответы.Я не знаю, как вы должны определить, когда AVPlayer
завершил свой аудио-ввод / вывод (кроме опроса с ошибкой setActive:false
).Я рассуждаю о том, что становление экрана блокировки / «Now Playing App» состоит из 3 частей (это где-то где-то задокументировано, this - самая близкая вещь, которую я могу найти к этому сейчас, хотя самая явная документациякак это работает, в системных журналах):
- категория не аудио микшируемых аудио сеансов
MPRemoteCommandCenter
интеграция - текущий или "недавно" законченный аудио IO
, поэтому, если вы можете удалить любую из этих частей, управление экраном блокировки должно исчезнуть.