Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

257
Views
Interactuar con el reproductor multimedia de "todo el sistema"

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:

captura de pantalla

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.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

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 :
    C:\Archivos de programa (x86)\Kits de Windows\10\Referencias\Windows.Foundation.UniversalApiContract\1.0.0.0\Windows.Foundation.UniversalApiContract.winmd
  • Windows.Foundation.FoundationContract :
    C:\Archivos de programa (x86)\Kits de Windows\10\Referencias\Windows.Foundation.FoundationContract\2.0.0.0\Windows.Foundation.FoundationContract.winmd

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.

over 4 years ago · Santiago Trujillo Report

0

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

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

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo Report

0

<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.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!