我正在使用 XamarinMediaManager 在 Xamarin.iOS 上构建 audioPlayer它基于 iOS 上的 AVPlayer
。
为了从锁定屏幕播放/暂停轨道,我将以下处理程序添加到 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();
//..
}
问题
当我多次访问 Controller 时,LockScreenPlay/Pause
被执行了几次,我如何在卸载 View 时删除旧的处理程序?
Ps: 我已经在ViewWillDisappear
方法中尝试了RemoveTarget
:
KMPRemoteCommandCenter.Shared.PlayCommand.RemoveTarget(this);
但是那没有用,我做错了什么?任何帮助,将不胜感激。
最佳答案
MPRemoteCommandCenter.Shared.PlayCommand.AddTarget(LockScreenPlay);
将返回一个 NSObject
。如果你想删除这个 Action ,你应该像这样使用这个 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);
来删除您添加的所有命令。暂停命令也是如此。
关于c# - 如何从 PlayCommand 中删除目标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50756784/