2015-07-16 1 views
7

Je souhaite 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é Google pour obtenir plus d'informations à ce sujet, mais je n'ai eu aucun succès. Quand je joue la musique dans la musique Groove et j'augmenter ou diminuer le volume, le nom ainsi que l'œuvre de l'artiste et de l'album de la chanson en cours apparaissent avec des commandes de musique à côté de l'indicateur de volume ceci:Interagir avec le lecteur multimédia «à l'échelle du système»

screen shot

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

+0

Je suis également à la recherche d'un moyen d'accéder aux informations sur une chanson jouée dans Groove Music par programmation. Je n'ai rien trouvé. –

Répondre

-1
<MediaElement x:Name="Media" 
       AreTransportControlsEnabled="True"> 
    <MediaElement.TransportControls> 
     <MediaTransportControls 
      Style="{StaticResource MediaTCStyle}"/> 
    </MediaElement.TransportControls> 
</MediaElement> 

Le style est assez grand donc je suis attacher un lien MediaTransportControls styles and templates Je suis le style de l'article (lien ci-dessus) et modifié dans mon propre ResourceDictionary.

+0

Bien, la bonne chose à utiliser maintenant est 'SystemMediaTransportControls', cette réponse m'a conduit à elle. Toujours curieux de savoir s'il existe un moyen d'y accéder en tant qu'application Windows native au lieu d'une application universelle. – caesay

+0

@caesay 'SystemMediaTransportControls' n'est disponible que pour les applications 'Metro' aussi @DanielFilipov Les TransportControls sont pour le contrôle par défaut de MediaElements dans l'élément lui-même et non dans SystemMediaTransportControls. – Stamos

+0

@Stamos Je suis d'accord et votre réponse est plus claire mais je ne vois pas pourquoi vous mettrez un vote à la baisse après que d'autres ont déjà commenté qu'il est utile. –

5

Vous devez utiliser SystemMediaTransportControls

Voici une configuration de base avec Play 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 ajouter le case dans le commutateur de bouton.

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

XAML

<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(); 
    }); 
} 

Sortie

Output

Aussi, si vous voulez tout cela fonctionne en arrière-plan, vous aurez t o Faites une déclaration dans Package.appxmanifest pour une tâches d'arrière-plan, activer l'audio et ajouter un point d'entrée comme TestUWP.MainPage

enter image description here

+0

Bonne réponse, mais j'ai trouvé un moyen d'utiliser cela à partir d'une application native, donc j'ai aussi posté une réponse détaillant cela. – caesay

3

Je vais ajouter mon entrée à ce même si il y a une grande réponse déjà par @Stamos, parce que j'ai trouvé qu'il est effectivement possible d'utiliser SystemMediaTransportControls à partir d'une application Windows native (pas seulement une application universelle). Tout d'abord, il faut toujours une référence aux fichiers universels winmd, donc cela ne fonctionnera que sur Win10. Ils seront situés dans le 10 sdk, et vous pouvez les ajouter via le Add Reference -> Browse régulier mais vous devrez peut-être changer le filtre en bas à droite de la boîte de dialogue à "Tous les fichiers" pour qu'ils s'affichent. Ils se trouvent ici sur mon PC:

  • Windows.Foundation.UniversalApiContract:
    C: \ Program Files (x86) \ Kits Windows \ 10 \ Références \ Windows.Foundation.UniversalApiContract \ 1.0.0.0 \ Windows.Foundation.UniversalApiContract.winmd
  • Windows.Foundation.FoundationContract:
    C: \ Program Files (x86) \ Kits Windows \ 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 allez rencontrer un autre problème - vous ne pouvez pas accéder aux commandes de transport par l'habituel SystemMediaTransportControls.GetForCurrentView(); (il lancera une exception) parce que vous n'avez pas réellement universel vue. Ceci est atténué en utilisant ce qui suit:

SystemMediaTransportControls systemControls = 
    BackgroundMediaPlayer.Current.SystemMediaTransportControls; 

Après cela, vous pouvez utiliser l'un des échantillons en ligne ou la réponse de Stamos.