Мое приложение использует MPMusicPlayerController.systemMusicPlayer()
для воспроизведения звука, который хорошо работает.Невозможно изменить MPRemoteCommandCenter Действия при использовании MPMusicPlayerController
Пользователь может установить пользовательский currentPlaybackRate
. Это работает так, как ожидалось.
Если пользователь нажимает на экран блокировки (MPRemoteCommandCenter
), currentPlaybackRate
сбрасывается на 1. Это происходит потому, что события отправляются непосредственно на системный музыкальный проигрыватель, а не на контроллер приложения.
Чтобы установить currentPlaybackRate
на правильное значение, я попытался отменить MPRemoteCommandCenter
события:
override func viewDidLoad() {
super.viewDidLoad()
AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "willEnterForeground:", name: UIApplicationWillEnterForegroundNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "playbackStateChanged:", name: MPMusicPlayerControllerPlaybackStateDidChangeNotification, object: player)
player.beginGeneratingPlaybackNotifications()
let rcc : MPRemoteCommandCenter = MPRemoteCommandCenter.sharedCommandCenter()
rcc.playCommand.addTargetWithHandler { (event: MPRemoteCommandEvent!) -> MPRemoteCommandHandlerStatus in
NSLog("Lock Screen Play Pressed")
return MPRemoteCommandHandlerStatus.Success
}
rcc.togglePlayPauseCommand.addTargetWithHandler { (event: MPRemoteCommandEvent!) -> MPRemoteCommandHandlerStatus in
NSLog("Lock Screen Play/Pause Pressed")
return MPRemoteCommandHandlerStatus.Success
}
}
предполагается ли MPRemoteCommandCenter
соблюдать addTargetWithHandler
при использовании MPMusicPlayerController
?
Вы решаете эту проблему? – AlKozin
У меня есть еще одна ветка, где я полностью заменил 'MPMusicPlayerController' на' AVAudioPlayer'. Это работает, но это означает, что вашему контроллеру необходимо обрабатывать гораздо больше логики. –