在停止时获取背景音频播放位置

本文关键字:音频 播放 位置 背景 获取 | 更新日期: 2023-09-27 18:07:59

我需要存储背景音频播放位置,以防另一个应用程序启动并接管后台音频播放设施。

我在我的音频播放器代理中使用了以下内容

protected override void OnPlayStateChanged(BackgroundAudioPlayer _player, AudioTrack _track, PlayState _playState)
{
    System.Diagnostics.Debug.WriteLine(_playState.ToString());
    double _pos = -1;
    try
    {
        _pos = _player.Position.TotalSeconds;
    }
    catch (Exception _ex)
    {
        System.Diagnostics.Debug.WriteLine(_ex.Message);
    }
    switch (_playState)
    {
    // handling of different state changes
    }
    myStorePositionRoutine(_pos)
    NotifyComplete();
}

来自例如缓冲或播放/暂停等事件的其他状态变化似乎工作得很好,我能够获得记录的最新位置以供以后使用。

然而,如果和当(在调试器中运行我的应用程序时)我启动另一个应用程序,该应用程序接管了手机中的背景音频播放器设施,调试器中的第一个(和最后一个)事件我可以看到是播放状态

"停止"

和异常消息

"背景音频资源不再可用。"

我是否可以做一些事情来强制背景音频播放器代理在预期"非优雅"关闭时进行常规位置保存-或者是否有其他方法/事件使用get和存储之前停止状态和不可用的背景音频资源的位置?

在停止时获取背景音频播放位置

当您调用其他Player时,您的Shutdown(因为只有一个BAP实例),其资源将不可用-这就是为什么您失去了_pos。要在实例之间保存它,您必须使用文件或IsolatedStorageSettings。您可以在每次用户停止播放或仅在调用Shutdown时保存。示例代码如下所示:

private static double _pos = 0;
protected override void OnPlayStateChanged(BackgroundAudioPlayer player, AudioTrack track, PlayState playState)
{
    switch (playState)
    {
       case PlayState.Shutdown:
            IsolatedStorageSettings IS = IsolatedStorageSettings.ApplicationSettings;
            if (IS.Contains("position")) IS["position"] = _pos;
            else IS.Add("position", _pos);
            IS.Save(); // remember to save
            // rest of the code

// And somewhere where you want to bring your position back (for example when your BAP starts):
// to retrive the position:
IsolatedStorageSettings IS = IsolatedStorageSettings.ApplicationSettings;
if (IS.Contains("position")) _pos = (double)IS["position"];
else _pos = 0;
// rest of the code

并使您的_pos 静态OnPlayStateChanged之外,那么它也将适用于OnUserAction