gpt4 book ai didi

c# - 如何从 PlayCommand 中删除目标?

转载 作者:行者123 更新时间:2023-11-28 20:59:01 27 4
gpt4 key购买 nike

我正在使用 XamarinMediaManagerXamarin.iOS 上构建 audioPlayer它基于 iOS 上的 AVPlayer

为了从锁定屏幕播放/暂停轨道,我将以下处理程序添加到 PlayCommandPauseCommand,如下所示:

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com