如何从 PlayCommand 中删除目标?
How to remove target from PlayCommand?
我正在使用 XamarinMediaManager 在 Xamarin.iOS 上构建音频播放器,它基于 iOS 上的 AVPlayer
。
为了 play/pause 来自锁定屏幕的曲目,我将以下处理程序添加到 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:我已经在 ViewWillDisappear
方法中尝试 RemoveTarget
:
KMPRemoteCommandCenter.Shared.PlayCommand.RemoveTarget(this);
但这没有用,我做错了什么?任何帮助,将不胜感激。
MPRemoteCommandCenter.Shared.PlayCommand.AddTarget(LockScreenPlay);
将 return 一个 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);
删除您添加的所有命令。暂停命令也是如此。
我正在使用 XamarinMediaManager 在 Xamarin.iOS 上构建音频播放器,它基于 iOS 上的 AVPlayer
。
为了 play/pause 来自锁定屏幕的曲目,我将以下处理程序添加到 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:我已经在 ViewWillDisappear
方法中尝试 RemoveTarget
:
KMPRemoteCommandCenter.Shared.PlayCommand.RemoveTarget(this);
但这没有用,我做错了什么?任何帮助,将不胜感激。
MPRemoteCommandCenter.Shared.PlayCommand.AddTarget(LockScreenPlay);
将 return 一个 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);
删除您添加的所有命令。暂停命令也是如此。