0

そのため、オンラインのリンクから mp3 ファイルをロード/ストリーミングしようとしています。実装で私が抱えている問題は、同じオーディオ ファイルが 2 回再生されることです。

コードは次のとおりです。

最初の宣言:

MediaPlayer mediaPlayer;

(フラグメント) OnCreateView:

mediaPlayer = new MediaPlayer();
playPodCast(getPosition);

PlayPodcast メソッド:

public void playPodCast(int index) {
        try {
            String url = toGet.get(index).get("URL").toString();
            mediaPlayer.reset();
            mediaPlayer.setDataSource(url);
            mediaPlayer.prepareAsync();
            mediaPlayer.setOnPreparedListener(this);
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onPrepared(MediaPlayer arg0) {
        // TODO Auto-generated method stub
        mediaPlayer.start();
    }

また、再生/一時停止ボタンを実装しました:

btnPlay.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        if (mediaPlayer.isPlaying()) {
            if (mediaPlayer != null) {
                mediaPlayer.pause();
                // Changing button image to play button
                btnPlay.setImageResource(R.drawable.play);
            }
        } else {
            // Resume song
            if (mediaPlayer != null) {
                mediaPlayer.start();
                // Changing button image to pause button
                btnPlay.setImageResource(R.drawable.pause);
            }
        }
    }
});

実装に関する奇妙な点は、オーディオ ファイルのデュアル再生モードでは、この再生/一時停止の実装を通じてアクセスできるのはそのうちの 1 つだけです。

たとえば、最初にオーディオ ファイル A(1 番目) が再生されると、数秒後にファイル A(2 番目) が再び再生されます。これら 2 つのうち、A(1st) は、再生/一時停止の実装を通じて制御可能です。

ヘルプ。

4

2 に答える 2

2

MediaPlayer のインスタンスが 2 つ作成されているように思えます。より多くのコードを見ないと、何が起こっているのかを確実に言うのは困難です。プレーヤーをどこかにリリースしていますか?logcat の出力を onCreateView に入れてみましたか?

この問題を回避する最も確実な方法は、ローカル サービスで MediaPlayer をホストすることです。Fragments はいくぶん揮発性であるため、MediaPlayer の寿命を 1 つに結び付けるのは最善の策ではないかもしれません。

于 2013-10-10T00:12:14.173 に答える
1

このコードを試して、

if(player.isPlaying())
      {  
        mediaplayer.stop();
       } 
        mediaplayer.reset();

  mediaplayer.setDataSource(url);
  mediaplayer.prepare();
  mediaplayer.start();
于 2013-10-09T08:56:34.193 に答える