Androidアプリケーションには2つのボタンがあり、各ボタンをクリックするとmp3ファイルが再生されます。問題は、_button1
_を再生すると_sound1
_を再生し、 _button2
_をクリックすると、_sound2
_が再生されます。
動作している場合は他のプレーヤーの各ボタンをチェックし、停止してクリックしたプレーヤーを再生します
しかし、同じボタンを2回クリックすると、最初のオーディオがバックグラウンドで再生され、別のオーディオが再び再生されます。
isPlaying()
をチェックして停止しようとしましたが、動作しません!
_button1
_をクリックすると_sound1
_が再生され、もう一度クリックすると停止して最初から再生します。
私のコード:
_package com.hamoosh.playaudio;
import Android.app.Activity;
import Android.media.MediaPlayer;
import Android.media.MediaPlayer.OnCompletionListener;
import Android.os.Bundle;
import Android.os.Handler;
import Android.view.View;
import Android.widget.Button;
import Android.widget.TextView;
public class PlayaudioActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button b= (Button) findViewById(R.id.button1);
Button b2= (Button) findViewById(R.id.button2);
final TextView t= (TextView) findViewById(R.id.textView1);
final MediaPlayer mp = MediaPlayer.create(PlayaudioActivity.this, R.raw.far);
final MediaPlayer mp1 = MediaPlayer.create(PlayaudioActivity.this, R.raw.beet);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mp1.isPlaying()) {
mp1.stop();
}
mp.start();
}
});
b2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mp.isPlaying()) {
mp.stop();
}
mp1.start();
}
});
}
}
_
複数のボタンを配列として使用できるコードや、各ボタンとプレーヤーを毎回チェックしないものがあればいいのですが。
1つのmediaplayerオブジェクトのみを使用する必要があります
public class PlayaudioActivity extends Activity {
private MediaPlayer mp;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button b = (Button) findViewById(R.id.button1);
Button b2 = (Button) findViewById(R.id.button2);
final TextView t = (TextView) findViewById(R.id.textView1);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopPlaying();
mp = MediaPlayer.create(PlayaudioActivity.this, R.raw.far);
mp.start();
}
});
b2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopPlaying();
mp = MediaPlayer.create(PlayaudioActivity.this, R.raw.beet);
mp.start();
}
});
}
private void stopPlaying() {
if (mp != null) {
mp.stop();
mp.release();
mp = null;
}
}
}
違法な状態の例外のリスクなしにMedia Playerを停止するには、以下を実行する必要があります
try {
mp.reset();
mp.prepare();
mp.stop();
mp.release();
mp=null;
}
catch (Exception e)
{
e.printStackTrace();
}
ただではなく
try {
mp.stop();
mp.release();
mp=null;
}
catch (Exception e)
{
e.printStackTrace();
}
Android APIガイド で表示できるMediaPlayer
ライフサイクルによると、reset()
ではなくstop()
を呼び出す必要があると思います、その後、最初からサウンドを再生するためにメディアプレーヤー(1つだけを使用)を再度準備します。サウンドが終了した可能性も考慮してください。したがって、setOnCompletionListener()
を実装して、もう一度サウンドを再生しようとしても失敗しないことを確認することをお勧めします。
誰かがこの質問に来た場合に備えて、私は簡単なバージョンを持っています。
public static MediaPlayer mp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button b = (Button) findViewById(R.id.button);
Button b2 = (Button) findViewById(R.id.button2);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mp = MediaPlayer.create(MainActivity.this, R.raw.game);
mp.start();
}
});
b2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mp.stop();
// mp.start();
}
});
}