1

スタックオーバーフローで利用可能なほとんどのオプションを試しました。助けてください! クリックすると MediaPlayer インスタンスを再生するボタンがありますが、メディアの再生中にダブルクリックまたはクリックすると問題が発生し、button.setEnable(false) と button.setClickable(false) を設定しても 2 回再生されます。 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インスタンスを作成する前に、現在のインスタンスがnullでない場合は停止して解放する必要があります

コードを解決するには、次のことができます。

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 に答える