windows-phone-8 - InvalidOperation 异常、背景音频代理、Windows Phone 8

标签 windows-phone-8 background-audio

我正在尝试将后台 AudioPlayer 添加到 Windows Phone 8 应用程序。

我已经创建了主项目和后台音频代理。我已将对后台音频播放器的引用添加到主项目中,并将以下内容添加到应用 list 文件中。

   <ExtendedTask Name="BackgroundTask">
       <BackgroundServiceAgent Name="myCastsbackgroundaudio" Type="myCastsbackgroundaudio.AudioPlayer" Source="myCastsbackgroundaudio" Specifier="AudioPlayerAgent"/>
    </ExtendedTask>

我已经仔细检查了引用资料,我确信它们指出了正确的内容。

我使用isolatedStorage和以下代码在两个应用程序之间共享信息

    private AudioTrack GetNextTrack()
    {
      string  myTrack = settingsHelper.Read("track", string.Empty);
      AudioTrack track = new AudioTrack()
      {
            Title = "Generic Title",
            Source = new Uri("isostore://"+ myTrack, UriKind.Relative)
      };
      return track;
    }

这似乎可以很好地获取轨道名称,然后尝试创建用于播放的音轨。此时,应用程序将抛出以下错误。

    System.InvalidOperationException was unhandled
      _HResult=-2146233079
      _message=Operation is not valid due to the current state of the object.
      HResult=-2146233079
      Message=Operation is not valid due to the current state of the object.
      Source=Microsoft.Phone
      StackTrace:
        at Microsoft.Phone.BackgroundAudio.AudioTrack.set_Title(String value)
        at myCastsbackgroundaudio.AudioPlayer.GetNextTrack()
        at myCastsbackgroundaudio.AudioPlayer.OnPlayStateChanged(BackgroundAudioPlayer player, AudioTrack track, PlayState playState)
        at Microsoft.Phone.BackgroundAudio.AudioPlayerAgent.CallOnPlayStateChanged(ParameterPropertyBag parameters)
        at Microsoft.Phone.BackgroundAudio.AudioPlayerAgent.Invoke(Uri uri, ParameterPropertyBag parameters)
        at Microsoft.Phone.BackgroundAgentDispatcher.AgentRequest.Invoke()
        at Microsoft.Phone.BackgroundAgentDispatcher.InvocationThread()
        at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
        at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
        at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
        at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
        at System.Threading.ThreadHelper.ThreadStart()
    InnerException: 

对于我的一生,我无法弄清楚是什么导致了错误。没有什么可以作为根本原因,而且我已经为其他应用程序执行过几次,没有出现任何问题。

如有任何建议或见解,我们将不胜感激。

编辑:根据要求,我已粘贴下面的 OnPLayStateChanged 代码

     protected override void OnPlayStateChanged(BackgroundAudioPlayer player, AudioTrack track, PlayState playState)
    {
       switch (playState)
        {
            case PlayState.TrackEnded:
                player.Track = GetNextTrack();
                break;
            case PlayState.TrackReady:
                player.Play();
                break;
            case PlayState.Shutdown:
                // TODO: Handle the shutdown state here (e.g. save state)
                break;
            case PlayState.Unknown:
                break;
            case PlayState.Stopped:
                break;
            case PlayState.Paused:
                break;
            case PlayState.Playing:
                break;
            case PlayState.BufferingStarted:
                break;
            case PlayState.BufferingStopped:
                break;
            case PlayState.Rewinding:
                break;
            case PlayState.FastForwarding:
                break;
        }

        NotifyComplete();
    }

还要添加一些附加信息,在 GetNextTrack 中创建音轨时会引发错误,因此此代码块

     AudioTrack track = new AudioTrack()
      {
            Title = "Generic Title",
            Source = new Uri("isostore://"+ myTrack, UriKind.Relative)
      };

最佳答案

AudioTrack 对轨道属性的编辑非常敏感。您应该使用构造函数来设置这些值,或者使用 AudioTrack.BeginEdit/EndEdit

所以尝试一下:

    var track =
        new AudioTrack(
            new Uri("isostore://"+ myTrack, UriKind.Relative),
            myTrack,
            string.Empty,
            string.Empty,
            null);

关于windows-phone-8 - InvalidOperation 异常、背景音频代理、Windows Phone 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14558851/

相关文章:

windows-phone-8 - Windows Phone 8 应用程序的内部部署

c# - 如何在 Windows Phone 8.1 中获取两个位置之间的距离

media-player - 如何访问 WP 8.1 中的媒体库?

audio - 将音频效果(混响等)添加到 BackgroundAudioPlayer 驱动的流式音频应用程序

unit-testing - Windows Phone开发和单元测试

javascript - 如何禁用 Windows Phone 键盘?

c# - Windows Audio 8.1 XAML背景音频崩溃

ios - 音频在后台播放但没有声音 Cordova 3+ IOS

windows-phone-7 - BackgroundAudioPlayer 不会释放音乐文件

c# - 应用名称的 wp8 应用商店本地化