2017-06-20 195 views
2

我正在使用MedialPlayer控件在我的應用程序中播放聲音效果,如解釋here所述。聲音是在應用程序中發生某些事情時播放「背景」的短音效,用戶不應該看到任何類型的媒體播放控制。如何在UWP中隱藏MediaPlayer控件

代碼是相當簡單的,看起來是這樣的:

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

這種運作良好,除了,當用戶按下鍵盤上的音量控制按鈕,旁邊會出現音量控制和一個小型媒體播放器控制用戶可以按播放鍵再次播放最後一個聲音(見圖)。我想隱藏這個。用戶不應該看到這個或者能夠重放聲音。 Media Player next to Volume Control

問題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(); 
     } 
    } 
} 
+0

我已經測試你的代碼,它可以隱藏''通過mPlayer.SystemMediaTransportControls.IsEnabled' SystemMediaTransportControls'。如果你想禁用'SystemMediaTransportControls'中的播放按鈕,你應該能夠將'IsPauseEnabled','IsStopEnabled'和'IsPlayEnabled'設置爲false。 –

+0

@ JaydenGu-MSFT我已經添加了一步一步的指南來複制這個問題。 – under

回答

3

現在看來,這是由引起的MediaPlayer還沒有準備好,當我們設置falseMediaPlayer.SystemMediaTransportControls.IsPlayEnabled

我們應該能夠添加MediaPlayerMediaOpened事件,那麼我們就可以在MediaOpened事件設置falseMediaPlayer.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; 
+0

謝謝!只需添加mPlayer.CommandManager.IsEnabled = false;解決了這個問題。無需訂閱mediaOpened事件或對SystemMediaTransportControls執行任何操作。 – under