1

私はオンライン ラジオ ストリーミング プロジェクトに取り組んでいます。URL からストリームを再生し、別の json URL からサウンド トラック情報を解析します。私がしたことは、10秒ごとにjsonを繰り返し解析することだけです。そのため、サウンドトラックが変更されているときに、その特定のトラックのトラック情報を取得できます。しかし、トラックが変更される 30 秒以上前に json ファイルが更新されているため、トラックとトラック情報の間に顕著な相違がある場合があります。

これは、ストリームを再生している asyncTask クラスです。

public class RadioPlayer extends AsyncTask<String, Void, Void> {

        MediaPlayer mediaPlayer = new MediaPlayer();

        @Override
        protected void onPreExecute() {

        }

        @Override
        protected Void doInBackground(String... params) {

            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            try {
                mediaPlayer.setDataSource(params[0]);
                mediaPlayer.prepare();

            } catch (IllegalArgumentException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (SecurityException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (IllegalStateException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }

            // might take long! (for buffering, etc)
            mediaPlayer.start();
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {

        }

10 秒ごとにトラック情報を更新するハンドラーを次に示します。

private void getSongStatistics() {
        r = new Runnable() {
            public void run() {

                try {
                    title = tsp.parseInitiator();
                } catch (ClientProtocolException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } finally {

                    Log.i("title", title);
                    try {
                        String[] subTitles = title.split("-");
                        tvTitle.setText(subTitles[1]);
                        tvArtist.setText(subTitles[0]);
                    } catch (Exception e) {

                        tvArtist.setText(title);
                    }
                    handler.postDelayed(this, 10000);

                }

            }
        };

        handler.postDelayed(r, 10000);

    }

この奇妙な問題を取り除く解決策はありますか?

4

1 に答える 1

0

ポーリングの代わりにプッシュを使用してデータを更新します。

于 2013-02-28T00:14:20.303 に答える