Как использовать системное оверлейное управление транспортировкой мультимедиа в приложении C # UWP? - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь использовать SMTC Overlay, который показывает текущую музыкальную информацию в левом верхнем углу рядом с ползунком громкости всплывающего окна. Я попробовал примеры на веб-сайте Microsoft, но все еще не могу настроить всплывающее окно SMTC.

Уже пробовали примеры на Microsoft на своем веб-сайте, документирующие это. Следил за видео на YouTube, которое объясняет связанную тему, но не работает. Я довольно новичок в C #, поэтому я довольно плохо знаком с классами и методами.

using System;
using Windows.Media;
using Windows.Media.Core;
using Windows.Media.Playback;
using Windows.Storage.Streams;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace systemmedoa
{
    public sealed partial class MainPage : Page
    {
        private MediaPlayer _mediaPlayer;
        private SystemMediaTransportControls _systemMediaTransportControls;

        public MainPage()
        {
            this.InitializeComponent();

            _mediaPlayer = new MediaPlayer();
            _mediaPlayer.Source = MediaSource.CreateFromUri(new Uri("ms-appx:///Assets/song.mp3"));
            _systemMediaTransportControls = MediaPlaybackItem.Get
            _mediaPlayer.CommandManager.IsEnabled = false;
            // Get the updater.
            SystemMediaTransportControlsDisplayUpdater updater = _systemMediaTransportControls.DisplayUpdater;
            _systemMediaTransportControls.IsEnabled = true;
            // Music metadata.
            updater.Type = Windows.Media.MediaPlaybackType.Music;
            updater.MusicProperties.Artist = "artist";
            updater.MusicProperties.AlbumArtist = "album artist";
            updater.MusicProperties.Title = "song title";

            _systemMediaTransportControls.IsPlayEnabled = true;
            _systemMediaTransportControls.IsPauseEnabled = true;
            _systemMediaTransportControls.IsPreviousEnabled = true;
            _systemMediaTransportControls.IsRewindEnabled = true;



            // Set the album art thumbnail.
            // RandomAccessStreamReference is defined in Windows.Storage.Streams
            updater.Thumbnail =
               RandomAccessStreamReference.CreateFromUri(new Uri("ms-appx:///Assets/albumart.png"));

            // Update the system media transport controls.
            updater.Update();
            _systemMediaTransportControls.DisplayUpdater.Update();
            _mediaPlayer.Play();
            _systemMediaTransportControls.PlaybackStatus = MediaPlaybackStatus.Playing;
        }   
    }
}

Как обычно, звук воспроизводится в фоновом режиме, но не показывает информацию о музыке во всплывающем ползунке громкости Windows, когда я использую клавиши регулировки громкости, как в «Показать наложение рабочего стола при использовании клавиш мультимедиа» в spotify.

1 Ответ

0 голосов
/ 07 июня 2019

Есть много вещей, которые отсутствуют в вашем посте, поэтому я думаю, что вам нужно сначала понять следующие две статьи:

  1. Интеграция с системой управления транспортировкой носителя
  2. Ручное управление системой управления транспортировкой носителя

Так что давайте просто проверим ваш код, есть несколько основных вопросов:

  • Хотите просто интегрировать с SMTC или настроить свой собственный SMTC? Если вы хотите настроить SMTC, почему я не увидел следующее из вашего кода?

    CommandManager.IsEnabled = false;
    
  • Программа обновления будет обновлять метаданные, но они отображаются там, где вы находитесь на экране блокировки. Это на самом деле не делает то, что вы хотите (поместите информацию рядом с ползунком громкости)

Возможный способ настроить это только с помощью SMTC по умолчанию:

     <StackPanel>
        <Button Click="Button_Click" Content="test"/>
        <Grid>
            <MediaPlayerElement x:Name="mediaplayerelement" 
    AreTransportControlsEnabled="True" />
            <TextBlock Text="artist" Width="50" Height="30" HorizontalAlignment="Left" Margin="62,48,0,0"/>
        </Grid>
     </StackPanel>
...