如何暂停和恢复音频

时间:2013-02-18 19:50:55

标签: android audio

我正在尝试制作一个播放audio1 10次后播放audio2一次的程序 再次播放audio1 10次然后播放audio3一次,应用程序有一个按钮暂停和恢复当前音频,每个音频改变imageView,问题是每次我暂停audio1音频2播放或当前音频停止并播放下一个音频。我怎样才能对音频进行更多控制,我的意思是我想暂停当前音频而另一个等到当前音频结束。

公共类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);

        }
    });

}

}

1 个答案:

答案 0 :(得分:0)

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

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

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