Quiero desarrollar una aplicación de música para Windows 10 y tengo curiosidad acerca de la interfaz proporcionada por Groove Music junto a la barra de volumen. He intentado buscar en Google para obtener más información al respecto, pero no he tenido ningún éxito en absoluto. Cuando estoy reproduciendo música en Groove Music y subo o bajo el volumen, el nombre, así como el artista y la carátula del álbum de la canción actual aparecen con controles de música al lado del indicador de volumen:

Me preguntaba cómo podría crear este cuadro de diálogo en mi propia aplicación y qué API de Windows tendría que buscar.
Voy a agregar mi aporte a esto a pesar de que ya hay una gran respuesta de @Stamos , porque descubrí que en realidad es posible usar SystemMediaTransportControls desde una aplicación nativa de Windows (no solo una aplicación universal).
En primer lugar, aún requiere una referencia a los archivos winmd universales, por lo que solo funcionará en Win10. Se ubicarán en el SDK 10, y puede agregarlos a través de Add Reference -> Browse , pero es posible que deba cambiar el filtro en la parte inferior derecha del cuadro de diálogo a "Todos los archivos" para que aparezcan. Se encuentran aquí en mi PC:
Windows.Foundation.UniversalApiContract :Windows.Foundation.FoundationContract : Una vez que tenga las referencias necesarias, se encontrará con otro problema: no puede acceder a los controles de transporte a través de SystemMediaTransportControls.GetForCurrentView(); (arrojará una excepción) porque en realidad no tiene una vista universal. Esto se alivia usando lo siguiente:
SystemMediaTransportControls systemControls = BackgroundMediaPlayer.Current.SystemMediaTransportControls;Después de esto, siéntase libre de usar cualquiera de las muestras en línea o la respuesta de Stamos.
Necesita usar SystemMediaTransportControls
Aquí hay una configuración básica con Reproducir y Pausa. Si desea habilitar más controles, puede hacerlo utilizando las propiedades disponibles, por ej.
systemControls.IsNextEnabled = true;
y tienes que añadir la case en el interruptor de botón.
case SystemMediaTransportControlsButton.Next: //handle next song break;xml
<MediaElement x:Name="mediaElement" Height="100" Width="100" AreTransportControlsEnabled="True"/>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(); }); }Producción
Además, si desea que todo esto funcione en segundo plano, deberá hacer una Declaración en Package.appxmanifest para Tareas en segundo plano, habilitar el audio y agregar un punto de entrada como TestUWP.MainPage
<MediaElement x:Name="Media" AreTransportControlsEnabled="True"> <MediaElement.TransportControls> <MediaTransportControls Style="{StaticResource MediaTCStyle}"/> </MediaElement.TransportControls> </MediaElement>El estilo es bastante grande, así que adjunto un enlace Estilos y plantillas de MediaTransportControls Obtuve el estilo del artículo (enlace anterior) y lo modifiqué en mi propio ResourceDictionary.