Windows Phone MediaPlayer.ActiveSongChanged - PullRequest
       17

Windows Phone MediaPlayer.ActiveSongChanged

1 голос
/ 13 декабря 2011

Я пишу приложение для Windows Phone, которое подключается к текущему медиапроигрывателю (предположительно, Zune - не уверен, что что-нибудь еще может выполнить эту роль), чтобы извлечь текущего исполнителя и название песни для дополнительного использования. Когда приложение загружается в первый раз, у меня есть представление, которое показывает эту информацию, однако при смене треков оно не обновляется. Я пытался подключиться к событию MediaPlayer.ActiveSongChanged, но, похоже, оно никогда не срабатывает ни в выделенном фрагменте кода, ни в моей ViewModel (используя MVVM Light). Чтобы подтвердить это, я поместил MessageBox.Show в обработчики событий в обоих местах, и ни один из них не появился.

Вот пример кода:

public MainViewViewModel()
{            
    MediaPlayer.ActiveSongChanged += new EventHandler<EventArgs>(MediaPlayer_ActiveSongChanged);
    FrameworkDispatcher.Update();
}

/// <summary>
/// Handles a song change so the view is updated.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void MediaPlayer_ActiveSongChanged(object sender, EventArgs e)
{            
    MessageBox.Show("song changed");
}

Я что-то здесь не так делаю? Обработка событий казалась довольно простой, поэтому я не уверен, что мне не хватает. Приведенный выше код (с / без FrameworkDispatcher.Update ()) был опробован как в выделенном коде, так и в виртуальной машине, и ни одна из них не работает.

Кроме того, есть ли способ проверить это без необходимости каждый раз развертывать на моем устройстве? Эмулятор, похоже, не обнаруживает, что Zune работает / играет в моей системе, поэтому я должен развертываться всякий раз, когда я пытаюсь что-то новое.

Любые предложения приветствуются!

Ответы [ 3 ]

1 голос
/ 22 декабря 2011

Похоже, это событие называется не глобально, а локально.Они означают, что смена активной песни означает, что вы используете MediaPlayer внутри своего приложения.Позвольте мне проиллюстрировать:

 private void PlayNextSong()
    {

      Song song = Song.FromUri(activesong.Name, new Uri("test" + i.ToString() + ".mp3", UriKind.Relative));
      MediaPlayer.Play(song);
      i++;
      FrameworkDispatcher.Update();
    }

private void button1_Click(object sender, RoutedEventArgs e)
    {
      PlayNewSong();
    }

Так что если вы запустите этот код, ваше событие будет запущено.

0 голосов
/ 14 августа 2013

События XNA Framework запускаются после вызова

FrameworkDispatcher.Update();

, поэтому удобно создавать класс IApplicationService с таймером, который снова и снова вызывает FrameworkDispatcher.Update ().

Для получения дополнительной информации и как это прочитать: Включить события XNA Framework в приложениях для Windows Phone

0 голосов
/ 14 декабря 2011

Обратите внимание на использование события BackgroundAudioPlayer.PlayStateChanged.

...