6

BackgroundAudioPlayerを使用するインターネットラジオアプリがあります。Timer in AudioPlaybackAgent

インターネットラジオ局のAPIから引き出されたBAPの現在再生中のトラックのトラックタイトルを更新するタイマーがオーディオ再生エージェントに必要です。オーディオ再生エージェントにDispatcherTimerを追加

は私にクロススレッドの例外を与え、使用して:

Deployment.Current.Dispatcher.BeginInvoke(() => 
      { 
       // Code 
      }); 

することはできませんでした。

私はここにコードが必要です。なぜなら、ユーザーがアプリから離れてナビゲートすると、アップデートが停止するからです(Windows 8の動作とは大きく異なります)。

スケジュールされたエージェントは、30分ごとに1回しか実行されないため、使用できません(IIRC)。

これは可能ですか、これはWindows Phoneで実行できませんか?

答えて

-1

トラックタグのバックグラウンドオーディオプレーヤーエージェントの情報を以下のように更新することを検討しましたか?

そして、必要に応じてフロントエンドのタグを読み取ってください。以下は

0

は、バックグラウンドオーディオプレーヤーのためのMSDNドキュメントからの抜粋です:タスク間のメッセージの送信

: バックグラウンドオーディオアプリの2つのプロセス間で通信することになるでしょう時間があります。たとえば、新しいトラックの再生開始時にバックグラウンドタスクがフォアグラウンドタスクに通知し、フォアグラウンドタスクに新しいソングタイトルを送信して画面に表示させることができます。単純な通信メカニズムは、フォアグラウンドプロセスとバックグラウンドプロセスの両方でイベントを発生させます。 SendMessageToForegroundメソッドとSendMessageToBackgroundメソッドはそれぞれ、対応するタスクのイベントを呼び出します。データは、受信タスクのイベントハンドラに引数として渡すことができます。 ValueSetという新しいクラスを使用してデータを渡します。このクラスは、文字列をキーとして、その他の値型を値として含む辞書です。 int、string、boolなどの単純な値の型を渡すことができます。

https://msdn.microsoft.com/en-US/library/windows/apps/xaml/dn642090

この情報がお役に立てば幸い!

+0

これは、上記の問題では機能しません。ユーザーはアプリケーションから遠ざかるので、フォアグラウンドはメッセージを受信することができません。私(とOP)は、バックグラウンドオーディオが再生されている間、UIが開いているかどうかに関係なく、定期的に(6秒ごとに)、何らかのタスクを実行しようとしています。今私がこれまでこれを行う方法は、Audio Streaming Agentを実装することだけです。私は簡単な方法があるかどうかを知りたい。 再生いただきありがとうございます。 –

0

私はあなたを助けることができる質問が見つかりました:あなたは、「タイトル」は、あなたはそれに戻ってこの情報を送信することができ、最後の知られているタイトルと異なる場合x秒ごとにチェックしているタイマーを設定するときHow to run a timer on background in windows phone 8?

を。

これはタイマーのコードを次のようになります。

string _newValue = string.Empty; 
string _currentValue = string.Empty; 
AudioTrack _tempTrack = null; 

とタイマー

if (this.BackgroundAudioPlayer != null) 
{ 
    if (this.BackgroundAudioPlayer.Instance != null) 
    { 
     if (this.BackgroundAudioPlayer.Instance.Track != null) 
     { 
      this._newValue= yourAPI.GetTitleOfTrack(); 

      try 
      { 
       /* First try to get the current Track as own Var */ 
       this._tempTrack = this.BackgroundAudioPlayer.Instance.Track; 
       if (this._tempTrack != null) 
       { 
        /* Then Read the .Tag Value from it, save to _currentValue */ 
        if (this._tempTrack.Tag != null) 
        { this._currentValue = this._tempTrack.Tag.ToString(); } 
        else 
        { this._currentValue = string.Empty; } 

        /* Compare */ 
        if (this._currentValue != this._newValue) 
        { 
        /* Edit the Track Tag from your original BAP */ 
        this.BackgroundAudioPlayer.Instance.Track.Tag = this._newValue; 
        } 
       } 
      } 
      catch(Exception ex) 
      { 
       /* if something Crashes you can save the exception error for protocol */ 
      } 
     } 
    } 
} 

覚えているためティックとしてこれを設定します:

は、これらの宣言の変更「yourAPI.GetTitleOfTrack( ) " - APIの実際の関数呼び出しでの関数。