Ich erstelle Android Anwendung enthält 2 Schaltflächen, bei Klick auf jede Schaltfläche wird eine MP3-Datei abgespielt. Das Problem ist, wenn ich button1
Abspiele, wird sound1
Abgespielt. Wenn ich auf button2
klicke, wird sound2
abgespielt.
Ich überprüfe auf jedem Knopf des anderen Spielers, ob es funktioniert und ich stoppe es und spiele den angeklickten
Wenn ich jedoch zweimal auf dieselbe Schaltfläche klicke, wird das erste Audiomaterial im Hintergrund wiedergegeben und ein weiteres erneut abgespielt
Ich habe versucht, isPlaying()
zu überprüfen und anzuhalten, aber es funktioniert nicht!
Ich möchte Wenn ich auf button1
Klicke, wird sound1
Abgespielt, und wenn ich erneut darauf klicke, wird es gestoppt und erneut von Anfang an abgespielt.
Mein Code:
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();
}
});
}
}
Hoffe, dass es einen besseren Code gibt, der mehrere Schaltflächen als Array verwendet, oder etwas, um nicht jedes Mal jede Schaltfläche und jeden Player zu überprüfen.
Sie sollten nur ein Mediaplayer-Objekt verwenden
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;
}
}
}
Um den Media Player anzuhalten, ohne dass die Gefahr einer unzulässigen Ausnahmebedingung besteht, müssen Sie Folgendes tun
try {
mp.reset();
mp.prepare();
mp.stop();
mp.release();
mp=null;
}
catch (Exception e)
{
e.printStackTrace();
}
anstatt nur
try {
mp.stop();
mp.release();
mp=null;
}
catch (Exception e)
{
e.printStackTrace();
}
Entsprechend dem MediaPlayer
-Lebenszyklus, den Sie im Android API-Handbuch anzeigen können, muss meines Erachtens reset()
anstelle von stop()
aufgerufen werden. , und bereiten Sie danach den Media Player erneut vor (verwenden Sie nur einen), um den Sound von Anfang an abzuspielen. Beachten Sie auch, dass der Ton möglicherweise beendet ist. Daher würde ich auch empfehlen, setOnCompletionListener()
zu implementieren, um sicherzustellen, dass der Sound nicht ausfällt, wenn Sie versuchen, ihn erneut abzuspielen.
nur für den Fall, dass jemand auf diese Frage kommt, habe ich die einfachere Version.
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();
}
});
}