【问题标题】:How to hide MediaPlayer control in UWP如何在 UWP 中隐藏 MediaPlayer 控件
【发布时间】:2017-06-20 22:02:07
【问题描述】:

我正在使用 MedialPlayer 控件在我的应用程序中播放音效,如 here 所述。声音是当应用程序发生某些事情时“在后台”播放的简短声音效果,用户不应看到任何类型的媒体播放控件。

代码相当简单,看起来像这样:

 MediaPlayer mPlayer = new MediaPlayer();
 mPlayer.Source =  MediaSource.CreateFromUri(pathUri);
 mPlayer.Play();

这很好用,除了当用户按下键盘上的音量控制按钮时,音量控制旁边会出现一个迷你媒体播放器控件,用户可以按下播放按钮再次播放最后一个声音(见图)。我想隐藏这个。用户不应该看到这个或能够重放声音。

问题14578867 提供的解决方案不起作用。答案中提到的属性不存在(例如 IsPlayPauseVisible、uImode、IsInteractive)。我尝试使用 SystemMediaTransportControls 中的类似属性,但没有区别。我认为这些是针对出现在应用程序中的控件(我没有),而不是针对我想要隐藏的“操作系统媒体控件”。

mPlayer.SystemMediaTransportControls.IsEnabled = false;
mPlayer.SystemMediaTransportControls.IsPlayEnabled = false;

如何禁用/隐藏它?

以下是复制问题的分步指南:

  1. 创建一个新的 Windows 通用 Visual C# 空白应用程序
  2. 将按钮添加到 MainPage.xaml 并将 mp3 文件添加到资产
  3. 将以下代码粘贴到 MainPage.cs
  4. 运行应用,点击按钮
  5. 在键盘上按音量增大按钮
  6. 使用音量控制旁边的播放按钮观察“媒体控制”(见上图)。

按下播放按钮再次播放声音。如果你很快,你也可以暂停播放。 SystemMediaTransportControls 属性没有区别。

using Windows.Media.Core;
using Windows.Media.Playback;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Input;

namespace App2
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }

        private void Button_Tapped(object sender, TappedRoutedEventArgs e)
        {
            MediaPlayer mPlayer = new MediaPlayer();
            mPlayer.Source = MediaSource.CreateFromUri(new System.Uri("ms-appx:///Assets/clap.mp3"));
            mPlayer.SystemMediaTransportControls.IsPlayEnabled = false;
            mPlayer.SystemMediaTransportControls.IsEnabled = false;
            mPlayer.Play();
        }
    }
}

【问题讨论】:

  • 我已经测试了你的代码,它可以隐藏SystemMediaTransportControls by mPlayer.SystemMediaTransportControls.IsEnabled。如果你想禁用SystemMediaTransportControls中的播放按钮,你应该可以将IsPauseEnabled、IsStopEnabled和IsPlayEnabled设置为false。
  • @JaydenGu-MSFT 我添加了一步一步的指南来复制问题。

标签: c# uwp media-player windows-10-universal


【解决方案1】:

似乎是因为MediaPlayer没有准备好,当我们将false设置为MediaPlayer.SystemMediaTransportControls.IsPlayEnabled时。

我们应该可以添加MediaPlayer的MediaOpened事件,然后我们可以在MediaOpened事件中将false设置为MediaPlayer.SystemMediaTransportControls.IsPlayEnabled。

例如:

MediaPlayer mPlayer;
private  void Button_Click(object sender, RoutedEventArgs e)
{
    mPlayer = new MediaPlayer();
    mPlayer.Source = MediaSource.CreateFromUri(new System.Uri("ms-appx:///Assets/xxxxx.mp3"));
    mPlayer.MediaOpened += MPlayer_MediaOpened;
    mPlayer.Play();
}

private void MPlayer_MediaOpened(MediaPlayer sender, object args)
{
    mPlayer.SystemMediaTransportControls.IsEnabled = false;
}

如果您只是禁用 SystemMediaTransportControls 中的按钮,您应该可以将 false 设置为 MediaPlayer.CommandManager.IsEnabled。

如果您使用 MediaPlayer 播放媒体,您可以通过访问 MediaPlayer.SystemMediaTransportControls 属性来获取 SystemMediaTransportControls 类的实例。如果您要手动控制 SMTC,则应通过将 CommandManager.IsEnabled 属性设置为 false 来禁用 MediaPlayer 提供的自动集成。+

如果通过将 IsEnabled 设置为 false 来禁用 MediaPlayer 的 MediaPlaybackCommandManager,它将断开 MediaPlayer 与 MediaPlayerElement 提供的 TransportControls 之间的链接,因此内置的传输控件将不再自动控制播放器的播放。相反,您必须实现自己的控件来控制 MediaPlayer。

有关详细信息,请参阅Set up transport controls。

例如:

_mediaPlayer = new MediaPlayer();
_systemMediaTransportControls = _mediaPlayer.SystemMediaTransportControls;
_mediaPlayer.CommandManager.IsEnabled = false;

【讨论】:

  • 谢谢!只需添加 mPlayer.CommandManager.IsEnabled = false;解决了这个问题。不必订阅 mediaOpened 事件或对 SystemMediaTransportControls 执行任何操作。
猜你喜欢
  • 2017-04-13
  • 1970-01-01
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多