バックグラウンドの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)
};