Interagir avec un lecteur multimédia “à l’échelle du système”

Je veux développer une application musicale pour Windows 10 et je suis curieux de connaître l’interface fournie par Groove Music à côté de la barre de volume. J’ai essayé de googler pour obtenir plus d’informations à ce sujet mais je n’ai eu aucun succès. Lorsque je joue de la musique dans Groove Music et que j’augmente ou diminue le volume, le nom ainsi que les illustrations de l’artiste et de l’album de la chanson en cours s’affichent avec des commandes de musique à côté de l’indicateur de volume:

capture d'écran

Je me demandais comment je pourrais créer cette boîte de dialog dans ma propre application et quelles API Windows je devrais examiner.

Vous devez utiliser SystemMediaTransportControls

Voici une configuration de base avec Lecture et pause. Si vous souhaitez activer plus de contrôles, vous pouvez utiliser les propriétés disponibles pour ex.

systemControls.IsNextEnabled = true;

et vous devez append le case dans le commutateur de bouton.

 case SystemMediaTransportControlsButton.Next: //handle next song break; 

xaml

  

C #

 public MainPage() { this.InitializeComponent(); systemControls = SystemMediaTransportControls.GetForCurrentView(); // Register to handle the following system transpot control buttons. systemControls.ButtonPressed += SystemControls_ButtonPressed; mediaElement.CurrentStateChanged += MediaElement_CurrentStateChanged; systemControls.IsPlayEnabled = true; systemControls.IsPauseEnabled = true; } private void MediaElement_CurrentStateChanged(object sender, RoutedEventArgs e) { switch (mediaElement.CurrentState) { case MediaElementState.Playing: systemControls.PlaybackStatus = MediaPlaybackStatus.Playing; break; case MediaElementState.Paused: systemControls.PlaybackStatus = MediaPlaybackStatus.Paused; break; case MediaElementState.Stopped: systemControls.PlaybackStatus = MediaPlaybackStatus.Stopped; break; case MediaElementState.Closed: systemControls.PlaybackStatus = MediaPlaybackStatus.Closed; break; default: break; } } void SystemControls_ButtonPressed(SystemMediaTransportControls sender, SystemMediaTransportControlsButtonPressedEventArgs args) { switch (args.Button) { case SystemMediaTransportControlsButton.Play: PlayMedia(); break; case SystemMediaTransportControlsButton.Pause: PauseMedia(); break; case SystemMediaTransportControlsButton.Stop: StopMedia(); break; default: break; } } private async void StopMedia() { await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => { mediaElement.Stop(); }); } async void PlayMedia() { await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => { if (mediaElement.CurrentState == MediaElementState.Playing) mediaElement.Pause(); else mediaElement.Play(); }); } async void PauseMedia() { await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => { mediaElement.Pause(); }); } 

Sortie

Sortie

Aussi, si vous voulez que tout cela fonctionne en arrière-plan, vous devrez faire une déclaration dans Package.appxmanifest pour une Package.appxmanifest en Package.appxmanifest -plan, activer l’audio et append un point d’entrée tel que TestUWP.MainPage

entrer la description de l'image ici

Je vais y append ma consortingbution même si @Stamos a déjà une excellente réponse, car j’ai constaté qu’il était possible d’utiliser SystemMediaTransportControls partir d’une application Windows native (pas seulement une application universelle).

Tout d’abord, il nécessite toujours une référence aux fichiers winmd universels, de sorte qu’il ne fonctionnera que sous Win10. Ils seront situés dans le sdk 10, et vous pouvez les append via le bouton Add Reference -> Browse mais vous devrez peut-être remplacer le filtre en bas à droite de la boîte de dialog par “Tous les fichiers”. Ils se trouvent ici sur mon PC:

  • Windows.Foundation.UniversalApiContract :
    C: \ Program Files (x86) \ Windows Kits \ 10 \ Références \ Windows.Foundation.UniversalApiContract \ 1.0.0.0 \ Windows.Foundation.UniversalApiContract.winmd
  • Windows.Foundation.FoundationContract :
    C: \ Program Files (x86) \ Windows Kits \ 10 \ Références \ Windows.Foundation.FoundationContract \ 2.0.0.0 \ Windows.Foundation.FoundationContract.winmd

Une fois que vous avez les références nécessaires, vous rencontrerez un autre problème – vous ne pouvez pas accéder aux contrôles de transport via SystemMediaTransportControls.GetForCurrentView(); habituel SystemMediaTransportControls.GetForCurrentView(); (il jettera une exception) car vous n’avez pas réellement une vue universelle. Ceci est atténué en utilisant ce qui suit:

 SystemMediaTransportControls systemControls = BackgroundMediaPlayer.Current.SystemMediaTransportControls; 

Après cela, n’hésitez pas à utiliser les échantillons en ligne ou la réponse de Stamos.

      

Le style est assez volumineux donc je joins un lien de styles et de modèles MediaTransportControls J’ai obtenu le style de l’article (lien ci-dessus) et l’ai modifié dans mon propre ResourceDictionary.