2016-10-10 4 views
1

Я пытаюсь использовать SystemMediaTransportControls в фоновом аудио приложении. Я использую класс MediaPlayer для воспроизведения звука. Настройка музыкальных свойств, эскиз все, кажется, работает нормально, но настройка кнопок управления (т. Е. «Следующая») не работает вообще. Мой вариант использования несколько уникален тем, что я не могу получить полный список воспроизведения сразу, следующий трек доступен только через вызов внутреннего метода.SystemMediaTransportControls - свойства настройки не работают

Вот что я делаю:

Эта часть работает отлично, регулятор громкости показывает всю звуковую информацию и миниатюру правильно:

var playbackItem = new MediaPlaybackItem(source); 
var displayProperties = playbackItem.GetDisplayProperties(); 
displayProperties.Type = Windows.Media.MediaPlaybackType.Music; 
displayProperties.Thumbnail = RandomAccessStreamReference.CreateFromUri(new Uri(_currentTrack.AlbumArtUrl)); 
displayProperties.MusicProperties.AlbumArtist = displayProperties.MusicProperties.Artist = _currentTrack.Artist; 
displayProperties.MusicProperties.Title = _currentTrack.SongTitle; 
displayProperties.MusicProperties.AlbumTitle = _currentTrack.Album; 
playbackItem.CanSkip = true; 
playbackItem.ApplyDisplayProperties(displayProperties); 
_player.Source = playbackItem; 

Эта часть не работает, «Next» кнопка все еще отключена, кнопка «Запись» не отображается.

var smtc = _player.SystemMediaTransportControls; 
smtc.ButtonPressed += OnSMTCButtonPressed; 
smtc.IsEnabled = true; 
smtc.IsNextEnabled = true; 
smtc.IsRecordEnabled = true; 

Я пытаюсь найти ответы онлайн, но не смог найти что-либо полезное. Любой ответ приветствуется.

ответ

0

В UWP, кроме SMTC, есть что-то вроде CommandManager - чтобы правильно работать с вашим SMTC, вам придется отключить его. Просто поставьте строку:

mediaPlayer.CommandManager.IsEnabled = false; 

после того, как вы инициализировали плеер, и он должен работать. Вы найдете более подробную информацию в MSDN:

Если вы используете MediaPlayer для воспроизведения мультимедиа, вы можете получить экземпляр класса SystemMediaTransportControls путем доступа к свойству MediaPlayer.SystemMediaTransportControls. Если вы собираетесь вручную управлять SMTC, вы должны отключить автоматическую интеграцию, предоставляемую MediaPlayer, установив для свойства CommandManager.IsEnabled значение false.

+0

Это хорошо работает - спасибо! Это также выглядит, если вы решили спуститься с разгромом ручного управления SMTC, вам нужно будет справиться с тем, что произойдет, если приложение также перейдет на задний план. Я нашел другой способ включить элементы управления в SMTC через CommandManager: установить CommandManager.NextBehavior.EnablingRule = MediaCommandEnablingRule.Always и обработать событие NextReceived из CommandManager. – sqexpress