0

我正在尝试制作一个程序,该程序在播放音频 2 一次后播放音频 10 次,然后再次播放音频 10 次,然后播放音频 3 一次,该应用程序有一个按钮来暂停和恢复当前音频以及每个音频更改imageView ,问题是每次我暂停 audio1 时,audio2 也会播放,或者当前音频停止并播放下一个音频。我怎样才能更好地控制音频,我的意思是我想暂停当前音频,另一个等到当前音频完成。

公共类 PrincipalActivity 扩展 ClassePai {

Thread thread;
private int currentPosition, duracaoTotal;

private MediaPlayer avemaria, intro, primeiro, segundo, terceiro, quarto,
        quinto, salve;
private ImageView imagem;
private Button btnProximo, btnAnterior, btnPause;

protected Intent intent;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_principal);

    avemaria = MediaPlayer.create(this, R.raw.teste);

    intro = MediaPlayer.create(this, R.raw.teste);

    primeiro = MediaPlayer.create(this, R.raw.ave_maria);

    segundo = MediaPlayer.create(this, R.raw.ave_maria);

    terceiro = MediaPlayer.create(this, R.raw.terceiro_goz);

    quarto = MediaPlayer.create(this, R.raw.quarto_goz);

    quinto = MediaPlayer.create(this, R.raw.quinto_goz);

    salve = MediaPlayer.create(this, R.raw.salve_bencao);

    imagem = (ImageView) findViewById(id.imageViewGoz);
    imagem.setImageResource(com.willamydotcom.osantoterco.R.drawable.g
            + getContador());

    Thread thread = new Thread() {

        public void run() {

            play(primeiro);

            // wait while the current audio plays
            while (primeiro.isPlaying()) {

            }

            play(avemaria);
            while (avemaria.isPlaying()) {

            }
            play(avemaria);
            while (avemaria.isPlaying()) {

            }
            play(avemaria);
            while (avemaria.isPlaying()) {

            }
            play(avemaria);
            while (avemaria.isPlaying()) {

            }
            play(avemaria);
            while (avemaria.isPlaying()) {

            }
            play(avemaria);
            while (avemaria.isPlaying()) {

            }
            play(avemaria);
            while (avemaria.isPlaying()) {

            }
            play(avemaria);
            while (avemaria.isPlaying()) {

            }
            play(avemaria);
            while (avemaria.isPlaying()) {

            }
            play(avemaria);
            while (avemaria.isPlaying()) {

            }
            play(segundo);
            while (avemaria.isPlaying()) {

            }

        }

    };
    thread.start();

    btnProximo = (Button) findViewById(id.btnTest);

    btnProximo.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {

            if (avemaria.isPlaying()) {

                avemaria.start();
            } else if (primeiro.isPlaying()) {
                primeiro.start();
            } else if (segundo.isPlaying()) {
                segundo.start();
            }
        }
    });

    btnPause = (Button) findViewById(id.btnPlay);
    btnPause.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            if (avemaria.isPlaying()) {

                avemaria.pause();
            } else if (primeiro.isPlaying()) {
                primeiro.pause();
            } else if (segundo.isPlaying()) {
                segundo.pause();
            }

        }
    });

    btnAnterior = (Button) findViewById(id.btnAnterior);
    btnAnterior.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

        }

    });

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_principal, menu);
    return true;
}

public void play(MediaPlayer audio) {
    audio.start();

    audio.setOnCompletionListener(new OnCompletionListener() {

        @Override
        public void onCompletion(MediaPlayer arg0) {

            imagem.setImageResource(R.drawable.g + getContador());

            setContador(getContador() + 1);

        }
    });

}

}

4

1 回答 1

0

首先,不要忘记在播放剪辑之前调用 MediaPlayer.prepare。

您不需要每个 play() 函数之后的 while 循环 - 在您的播放函数中,您正在设置一个 OnCompletionListener - 您可以将逻辑放在那里以决定当您的一个音频剪辑完成时接下来要播放什么 - 所以它只会在剪辑结束时播放,而不是在剪辑暂停时播放。看看 MediaPlayer ( http://developer.android.com/reference/android/media/MediaPlayer.html ) 中可用的功能,尤其是 setAudioSessionId (你可以给每个剪辑一个 ID,这样你就可以知道哪个剪辑是完整的你的 OnCompletionListener)

实际上,最好只使用一个 MediaPlayer 对象并更改数据源(在必要时使用 setDataSource ......我没有经常使用这个类,所以我不确定设置它的最佳方法是什么。

于 2013-02-18T21:50:33.440 回答