В основном, я использую этот образец.
XAMLrenderingBackgroundTask, который обновляет мою живую плитку с обложкой альбома, текстом и т. д. Работает отлично, однако я не могу запустить его при смене песни. Я понятия не имею, как я могу запустить эту задачу, когда песня меняется.
У меня есть отдельная BackgroundTask, которая постоянно работает и получает события для изменений песни и т. д. Но я не знаю, как запустить эту XAMLrenderingBackgroundTask самостоятельно, не добавляя триггеры, такие как изменение системного времени и т. д. Это должно быть возможно, я вижу другие приложения, обновляющие изображения на плитках при смене песни.
Я попытался реализовать XAMLrenderingBGTask с помощью Media BackgroundTask и попытался обновить живую плитку при изменении мультимедиа, но произошел сбой из-за того, что какой-то вызов маршалируется из другого потока, чего я и ожидал.
Теперь я застрял. Вот моя фоновая задача для медиаплеера, событие MediaOpened должно инициировать изменение плитки для новой песни, но я не могу...
public sealed class BackgroundAudioTask : IBackgroundTask
{
public void Run(IBackgroundTaskInstance taskInstance)
{
systemmediatransportcontrol = SystemMediaTransportControls.GetForCurrentView();
systemmediatransportcontrol.ButtonPressed += systemmediatransportcontrol_ButtonPressed;
systemmediatransportcontrol.PropertyChanged += systemmediatransportcontrol_PropertyChanged;
systemmediatransportcontrol.IsEnabled = true;
systemmediatransportcontrol.IsPauseEnabled = true;
systemmediatransportcontrol.IsPlayEnabled = true;
systemmediatransportcontrol.IsNextEnabled = true;
systemmediatransportcontrol.IsPreviousEnabled = true;
systemmediatransportcontrol.IsFastForwardEnabled = true;
systemmediatransportcontrol.IsRewindEnabled = true;
//Add handlers for MediaPlayer
BackgroundMediaPlayer.Current.CurrentStateChanged += Current_CurrentStateChanged;
BackgroundMediaPlayer.Current.MediaOpened += MediaPlayer_MediaOpened;
BackgroundMediaPlayer.Current.MediaEnded += MediaPlayer_MediaEnded;
BackgroundMediaPlayer.Current.MediaFailed += mediaPlayer_MediaFailed;
BackgroundMediaPlayer.Current.VolumeChanged += Current_VolumeChanged;
BackgroundTaskStarted.Set();
backgroundtaskrunning = true;
}