2012-04-07 9 views
1

Ich versuche, ein Soundboard für längere Audiodateien zu erstellen und kann nicht herausfinden, wie eine Audiodatei gestoppt und neu gestartet wird, ohne die Aktivität zu beenden. Nehmen wir an, jede Audiodatei ist eine Minute lang. Wenn ich die erste Audiodatei 20 Sekunden lang wiedergebe und die nächste Audiodatei starte, hört die erste auf zu spielen und die zweite beginnt zu spielen. Wenn ich jedoch erneut auf die erste Audiodatei klicke, hört die zweite auf zu spielen und die erste nicht. Ich brauche Hilfe. Das macht mich wahnsinnig.Android - Looping-Aktivität zum Wiederholen von MediaPlayer

bAudio1 = (ImageButton) findViewById(R.id.bAudio1); 
    bAudio2 = (ImageButton) findViewById(R.id.bAudio2); 

    mpAudio1 = MediaPlayer.create(this, R.raw.audio1); 
    mpAudio2 = MediaPlayer.create(this, R.raw.audio2); 

    bAudio1.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
        if(mpAudio1.isPlaying()) { 
          mpAudio1.stop(); 
        } else { 
          if(mpAudio2.isPlaying()) { mpAudio2.stop(); } 
          mpAudio1.start(); 
        } 
      } 
    }); 

    bAudio2.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
        if(mpAudio2.isPlaying()) { 
          mpAudio2.stop(); 
        } else { 
          if(mpAudio1.isPlaying()) { mpAudio1.stop(); } 
          mpAudio2.start(); 
        } 
      } 
    }); 

Antwort

1

Dieser arbeitete für mich:

public class ExampleActivity extends Activity implements OnClickListener { 

private Button button1; 
private Button button2; 
private MediaPlayer mediaPlayer1; 
private MediaPlayer mediaPlayer2; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.your_layout); 

    button1 = (Button) findViewById(R.id.button1); 
    button1.setOnClickListener(this); 
    button2 = (Button) findViewById(R.id.button2); 
    button2.setOnClickListener(this); 
} 

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.button1: 
     // play first audio clip and stop the second if playing 
     if (mediaPlayer2 != null && mediaPlayer2.isPlaying()) { 
      mediaPlayer2.stop(); 
      mediaPlayer2.release(); 
      mediaPlayer2 = null; 
     } 
     mediaPlayer1 = MediaPlayer.create(this, R.raw.song1); 
     mediaPlayer1.start(); 
     break; 
    case R.id.button2: 
     // play second audio clip and stop the first if playing 
     if (mediaPlayer1 != null && mediaPlayer1.isPlaying()) { 
      mediaPlayer1.stop(); 
      mediaPlayer1.release(); 
      mediaPlayer1 = null; 
     } 
     mediaPlayer2 = MediaPlayer.create(this, R.raw.song2); 
     mediaPlayer2.start(); 
     break; 
    } 
} 

@Override 
protected void onPause() { 
    super.onPause(); 

    // stop the second if playing 
    if (mediaPlayer2 != null && mediaPlayer2.isPlaying()) { 
     mediaPlayer2.stop(); 
     mediaPlayer2.release(); 
     mediaPlayer2 = null; 
    } 

    // stop the first if playing 
    if (mediaPlayer1 != null && mediaPlayer1.isPlaying()) { 
     mediaPlayer1.stop(); 
     mediaPlayer1.release(); 
     mediaPlayer1 = null; 
    } 
} 
+0

ich .Prepare nahm(), da ich keine Datenquelle einstellen, wenn Sie es müssten schließen, wenn Sie den Song lesen entschieden aus eine Datei. http://developer.android.com/reference/android/media/MediaPlayer.html#prepare() Außerdem habe ich die Logik weggelassen, um den Song von der Schaltfläche aus zu stoppen, die ihn startet. Das sollte wahrscheinlich zu einem anderen Knopf IMHO abstrahiert werden. –