1

我尝试了stackoverflow上可用的大多数选项,请你帮帮我!我有一个在单击时播放 MediaPlayer 实例的按钮,但是如果我在播放媒体期间单击双击或单击,即使我设置了 button.setEnable(false) 和 button.setClickable(false),它也会播放两次,下面是Main.java 中的代码,我在 xml 中设置了 android:onClick="playMedia"

MediaPlayer playMedia;
private void playGeneric(MediaPlayer mp, int name, Button button) {
    button.setEnabled(false);
    button.setClickable(false);
    mp = MediaPlayer.create(this, name);
    mp.start();
    while (mp.isPlaying()) {
    }
    mp.stop();
    mp.release();
    mp = null;
    button.setEnabled(false);
    button.setClickable(false);

}

// play the Media
public void playMedia(View button) {
    playGeneric(Media, R.raw.Media, (Button) findViewById(R.id.button1));
}

多谢

4

1 回答 1

0

1-每个活动/服务应该有一个(最好是static)实例MediaPlayer

2-这个循环while (mp.isPlaying())是非常糟糕的做法,你只需要听适当的事件

3-在创建新MediaPlayer实例之前,您必须检查当前实例是否不为空,然后停止并释放它

要解决您的代码,您可以执行以下操作:

1-让您的类实现OnCompletionListener并覆盖在完成和清理资源onCompletion(MediaPlayer mp)时通知的方法MediaPlayer(但是当您的活动/服务被破坏时,您也需要清理它)

2-

static MediaPlayer playMedia;

private void playGeneric(MediaPlayer mp, int name, Button button) {
    button.setEnabled(false);
    button.setClickable(false);
    if(mp !=null){
      mp.stop();
      mp.release();
    }
    mp = MediaPlayer.create(this, name);
    mp.start();

}

@Override
public void onCompletion(MediaPlayer mp) {
    mp.release();
    playMedia = null;
    button.setEnabled(true);
    button.setClickable(true);
}
于 2013-02-18T04:36:49.270 回答