如何使用playStateChanged事件的背景audioplayer



在我的应用中,我想知道何时播放状态。但是我不知道如何订阅活动并获得当前状态。我怎样才能做到这一点?谢谢。

我在MSDN中看到了一个陈述,但不明白它的含义以及如何实现它:

在Windows Phone 8中,您可以检查Playstatechangedeventargs 确定CurrentPlayState和InterMediatePlayState 发生在音频播放器进入当前播放状态之前。

详细信息:

在主页上我这样做:

public MainPage()
{
    BackgroundAudioPlayer.Instance.PlayStateChanged += new EventHandler(Instance_PlayStateChanged);
}

然后

private void Instance_PlayStateChanged(object sender, EventArgs e)
{
    var playerState = BackgroundAudioPlayer.Instance.PlayerState;
}

,但我觉得这不是使用事件和EventArgs的正确方法。它也没有给我正确的最新值。

PlayerStateChanged事件绝对是确定更改的正确方法,但是当您订阅它时它不会发射,因此您不会获得当前状态。尝试这样的事情:

BackgroundAudioPlayer audioPlayer = BackgroundAudioPlayer.Instance;
public MainPage()
{
    audioPlayer += OnPlayStateChanged;
    OnPlayStateChanged(audioPlayer.PlayerState);
}
private OnPlayStateChanged(object sender, EventArgs e)
{
    OnPlayStateChanged(audioPlayer.PlayerState);
}
private OnPlayStateChanged(PlayState state)
{
    // Process state here
}

话虽如此,值得指出的两件事。

首先,《背景audioplayer》是一种极为易变的API。如果不处于正确的内部状态,通常会抛出异常。请随时使用我为PodCaster开发的扩展方法:https://gist.github.com/richardszalay/8552812

其次,当播放位置更改时,PlayerStateChanged不会触发。为此,我建议使用DispatcherTimer并通过我的TryGetPosition方法更新显示器(但仅当GetTrackOrDefault()返回非null时)。我还建议使用子秒计时器(200-300ms)保持"滴答"正确。当游戏机更改为FastForwardingRewinding时,将计时器更新为20-30ms,并在返回Playing时还原。

使用此解决方案以及链接您将获得解决方案: -

在此处输入链接说明

 void Instance_PlayStateChanged(object sender, EventArgs e)
    {
        switch (BackgroundAudioPlayer.Instance.PlayerState)
        {
          case PlayState.Playing:
            playButton.Content = "pause";
            break;
          case PlayState.Paused:
          case PlayState.Stopped:
            playButton.Content = "play";
            break;
        }
        if (null != BackgroundAudioPlayer.Instance.Track)
        {
          txtCurrentTrack.Text = BackgroundAudioPlayer.Instance.Track.Title +
                                 " by " +
                                 BackgroundAudioPlayer.Instance.Track.Artist;
        }
    }

最新更新