Как удалить цель из PlayCommand? - PullRequest
0 голосов
/ 08 июня 2018

Я создаю аудиоплеер на Xamarin.iOS , используя XamarinMediaManager , основанный на AVPlayer на iOS.

Для воспроизведения / паузы дорожки сэкран блокировки я добавил следующие обработчики к PlayCommand и PauseCommand следующим образом:

MPRemoteCommandCenter.Shared.PlayCommand.AddTarget(LockScreenPlay);
MPRemoteCommandCenter.Shared.PauseCommand.AddTarget(LockScreenPause);
 //..

 private MPRemoteCommandHandlerStatus LockScreenPlay(MPRemoteCommandEvent arg)
{
  //..
    PlaybackController.Play();
  // ..
}
 private MPRemoteCommandHandlerStatus LockScreenPause(MPRemoteCommandEvent arg)
{
 //..
    PlaybackController.Pause();
 //..
}

Проблема

Когда я получаю доступ к контроллеру несколько раз LockScreenPlay/Pause выполняется несколько раз. Как я могу удалить старые обработчики, когда представление выгружено?

Ps: я уже пытался RemoveTarget в методе ViewWillDisappear:

KMPRemoteCommandCenter.Shared.PlayCommand.RemoveTarget(this);

но это не сработало, что я делаю не так?любая помощь будет оценена.

1 Ответ

0 голосов
/ 11 июня 2018

MPRemoteCommandCenter.Shared.PlayCommand.AddTarget(LockScreenPlay); вернет NSObject.Если вы хотите удалить это действие, вы должны использовать этот API, например:

// Add play command
playCommand =  MPRemoteCommandCenter.Shared.PlayCommand.AddTarget(LockScreenPlay);
// Remove play command later
MPRemoteCommandCenter.Shared.PlayCommand.RemoveTarget(playCommand);

Таким образом, вам нужно записывать команды каждый раз, когда вы добавили.Затем удалите их, когда хотите.

Также вы можете попробовать использовать селектор OC для добавления команды воспроизведения:

MPRemoteCommandCenter.Shared.PlayCommand.AddTarget(this, new ObjCRuntime.Selector("LockScreenPlay:"));
[Export("LockScreenPlay:")]
private void LockScreenPlay(MPRemoteCommand command)
{
   ...
}

Таким образом, вы можете использовать MPRemoteCommandCenter.Shared.PlayCommand.RemoveTarget(this); для удаления всех команд.Вы добавили.Так что делайте команды паузы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...