0

Android用に取り組んでいるラジオストリーミングアプリで少し問題があります。アプリ内のすべてが、このわずかな部分を除いてうまく機能しているため、非常にイライラしています.

バッファリング/ネットワークの変更が発生したときにアプリケーションがアクションを実行できるように、AudioPlayer の現在の再生状態をキャプチャできるようにしたいと考えています。

たとえば、今日、接続が 3G から Wi-Fi に変更されたため、プレーヤーが停止してフリーズしました。

これをキャプチャするために、以下のように変更するためにイベント リスナーにいくつかのコードを追加しました。

player.addEventListener('change',function(e){

    if(e.state == player.STATE_WAITING_FOR_DATA){
            lblStatus.text = 'Reconnecting in 10s';
        setTimeout(reconnect,10000); // This fires a reconnect function further down in my code.
    }

});

ただし、変更イベントは発生しません。これは、データ ストリームを待機するプロセスが原因で、変更イベントが発生しないように見えます。

そこで、このように1秒ごとにストリームチェック関数を呼び出す間隔を設定する方法も考えました。

setInterval(checkStream,1000);

function checkStream(){
    if(player.state == player.STATE_WAITING_FOR_DATA){
        // Add reconnect code here
    }
}

これもうまくいきませんでした。デバッグ アラートを追加して値を表示するとplayer.state、再生中も常に null でした。Titanium Studio IDE では、このプロパティは Android では使用できないと表示されます。ただし、Web サイトの API ドキュメントには、そうであると記載されています。私はIDEを信じています。

最後の手段として、Ti.Network の変更イベントをキャプチャし、接続がオンラインに戻ったことが検出されたら再接続コードを実行することにしました。ただし、これは必要ない場合があり、実際には必要がないときにストリームを切断して再接続します。

AudioPlayer の状態をキャプチャする他の方法はありますか、それともネットワーク変更イベントに固執することが唯一の方法ですか?

前もって感謝します、

デイブ

4

1 に答える 1

0

私は AudioPlayer 機能を使用して自分のプレイリストを作成したので、次のトラックをリクエストできるように、トラックがいつ終了したかを検出することが非常に重要でした。イベントは Android と iOS の両方で発生しますが、実際の STATE は Android (3.0 SDK) では使用できません。Android ではあまり有用なイベントではありません。これが私が行ったものです:

var nextTrackIfEnd = function() { 

    if (Ti.Platform.name === 'android')
    {
        $.debug.text = "isPlaying: " + audioPlayer.isPlaying();
        if(!audioPlayer.isPlaying() && hasStarted)
        {
            nextTrack();
        }
    }
    else
    {
        $.debug.text = "state: " + audioPlayer.state;
        if(audioPlayer.state == 0)
        {
            nextTrack();
        }
    }
};
setInterval(nextTrackIfEnd, 500);
于 2013-04-04T21:33:40.187 に答える