2012-09-04 12 views
15

Ich erstelle Android-Anwendung enthält 2 Tasten, klicken Sie auf jeden Knopf eine MP3-Datei. Das Problem ist, wenn ich spiele button1 es spielt sound1, wenn ich klicke es spielt sound2.Android MediaPlayer Stop und Play

ich überprüfen, auf jeder Taste, um die anderen Spieler, wenn es funktioniert und ich höre es und spielen die klickte ein

Aber wenn ich auf der gleichen Taste klicken zweimal ist es erste Audio-Wiedergabe im Hintergrund halten und ein anderes spielen wieder

Ich habe versucht, isPlaying() zu überprüfen und zu stoppen, aber es funktioniert nicht!

Ich möchte Wenn ich auf button1 klicke es sound1 abspielen und wenn man es erneut anklickt stoppt es und spielt es wieder von Anfang an.

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(); 
      } 
     }); 
    } 
} 

Hoffnung, wenn es einen besseren Code, der mehrere Tasten als ein Array oder etwas nicht überprüfen Sie jede Taste und Spieler jedes Mal verwenden können.

Antwort

31

Sie sollten nur ein Mediaplayer-Objekt

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; 
      } 
     } 
    } 
+0

Danke, es funktionieren –

+1

Kein Problem Mann :) – mario

+0

@mario ich verrückt ging nach einem Weg suchen Media-Player in meiner App zu implementieren und obwohl viele Leute helfen oder zumindest versucht, mir zu helfen, aber Kein Erfolg. Du hast es geschafft. Das einzige Problem, das ich jetzt habe, ist, wo der Code platziert werden soll, wo/wie überprüft werden soll, ob der Ton zu spielen aufgehört hat. Sobald der Ton aufhört zu spielen, möchte ich einen Knopf anzeigen. Ich habe deine Antwort aufgewertet. – Si8

2

Nach dem Media Player Lebenszyklus verwenden, die Sie in den Android API guide sehen können, denke ich, dass Sie anrufen müssen zurückgesetzt() anstelle von stop(), und Danach bereiten Sie den Media Player (verwenden Sie nur einen) vor, um den Sound vom Anfang an zu spielen. Beachten Sie auch, dass der Sound möglicherweise beendet ist, daher würde ich auch empfehlen, setOnCompletionListener() zu implementieren, um sicherzustellen, dass, wenn Sie versuchen, den Sound erneut zu spielen, er nicht fehlschlägt.

1

Um den Media Player, ohne das Risiko einer illegalen State Exception zu stoppen, müssen Sie

try { 
     mp.reset(); 
     mp.prepare(); 
     mp.stop(); 
     mp.release(); 
     mp=null; 
     } 
    catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 

statt nur

try { 
     mp.stop(); 
     mp.release(); 
     mp=null; 
    } 
catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
0

nur für den Fall tun jemand auf diese Frage kommt, ich habe 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(); 
      } 
     }); 
    }