2

バックグラウンドのAudioPlayerをWindowsPhone8アプリケーションに追加しようとしています。

メインプロジェクトとバックグラウンドオーディオエージェントを作成しました。バックグラウンドオーディオプレーヤーへの参照をメインプロジェクトに追加し、以下をアプリマニフェストファイルに追加しました。

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

私は参照を2回および3回チェックしましたが、それらが正しいことを示していると確信しています。

私はIsolatedStorageと次のコードを使用して2つのアプリケーション間で情報を共有しています

    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)
      };
4

1 に答える 1

5

AudioTrackトラック プロパティの編集に非常に敏感です。これらの値を設定するには、コンストラクターを使用するか、または を使用する必要がありますAudioTrack.BeginEdit/EndEdit

だから試してください:

    var track =
        new AudioTrack(
            new Uri("isostore://"+ myTrack, UriKind.Relative),
            myTrack,
            string.Empty,
            string.Empty,
            null);
于 2013-01-28T10:52:33.020 に答える