2016-10-12 6 views
0

Ich versuche, eine kleine App zu bauen, die einen Ton abspielt, wenn wir auf den Knopf klicken. Aber ich kann den Ton nicht spielen. Ich weiß nicht, was das Problem ist. Bitte helfen Sie mir dabei. Unten ist der Code.Android Studio - Media Player spielt keinen Ton auf Genymotion?

public class MainActivity extends AppCompatActivity { 

    private Button button; 
    private MediaPlayer mediaPlayer; 

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

     mediaPlayer = new MediaPlayer(); 
     mediaPlayer = MediaPlayer.create(getApplicationContext(),R.raw.song); 


     button = (Button)findViewById(R.id.mediaButtonId); 

     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       mediaPlayer.start(); 

      } 
     }); 
    } 

} 

Hinweis: -Sorry Jungs, dachte ich, dass das Problem mit meinem Code ist aber die App läuft auf meinem Handy völlig in Ordnung, so dass ich das Problem mit meinem genymotion jemand emulator.Can bitte machen Sie mir die Lösung für Übrigens benutze ich Mac OSX.

Antwort

1

Der MediaPlayer hat einen eigenen Lebenszyklus. Sie können die Instanz nicht einfach erstellen und dann mit der Wiedergabe beginnen. Zuerst musst du es vorbereiten und dann spielen.

Sie können Ihren Mediaplayer entweder synchron oder asynchron vorbereiten.

Etwas entlang der Linien von:

MediaPlayer mediaPlayer= new MediaPlayer(); 
mediaPlayer=MediaPlayer.create(getApplicationContext(),R.raw.song); 

mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
@Override 
public void onPrepared(MediaPlayer mediaPlayer) { 
    mediaPlayer.start(); 
} 
}); 
mediaPlayer.prepareAsync(); 

Oder, wenn Sie es tun wollen synchron

MediaPlayer mediaPlayer= new MediaPlayer(); 
    mediaPlayer=MediaPlayer.create(getApplicationContext(),R.raw.song); 
    try { 
     mediaPlayer.prepare(); 
    } catch (IOException e){ 

    } 
    mediaPlayer.start(); 

So stellen Sie sicher, dass Sie es vorbereiten, bevor Sie es spielen.

Media Player Lebenszyklus: https://developer.android.com/reference/android/media/MediaPlayer.html

+0

Ich habe versucht, aber ich bekomme ILLEGAL STATE EXCEPTION –

+0

Was ist die Fehlermeldung? –

+0

In StackTrace wird "verursacht durch IllegalStateException" in der Zeile angezeigt, in der sich der Prepare() -Aufruf befindet. Ich habe einige Sites verwiesen. Einige sagen, dass mehrere prepare() Aufrufe diese Ausnahme verursachen. –

0

benötigen Sie den Media-Player, um sicherzustellen, ist bereit, bevor Sie es spielen können, so dass Sie die onPreparedListener setzen diese für Sie zu behandeln, etwa so:

MediaPlayer mp = new MediaPlayer(); 

mp = MediaPlayer.create(getApplicationContext(),R.raw.song); 

mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
    @Override 
    public void onPrepared(MediaPlayer mediaPlayer) { 
     mp.start(); 
    } 
}); 

button = (Button)findViewById(R.id.mediaButtonId); 

button.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     mp.prepareAsync(); 
    } 
}); 

Es kommt zu einer leichten Verzögerung von dem Drücken des Knopfes zu dem auf diese Weise wiedergegebenen Ton. Eine andere Möglichkeit, dies zu tun, könnte darin bestehen, die Taste zu deaktivieren, bis der Medienplayer vorbereitet wurde, und dann in dem Onclick der Taste mp.start(); zu rufen, wenn die Taste aktiviert wurde.

+0

Sorry funktioniert nicht.Ich denke, das Problem ist mit meinem Emulator.Ich benutze genymotion.wenn ich isPlaying() -Methode verwenden, zeigt es wahr, was bedeutet, dass der Code läuft gut.Aber ich kann nicht klingen –

+0

Test auf ein echtes Gerät @SaiSankalp – MichaelStoddart

+0

Ja danke Ich habe es getestet funktioniert gut auf meinem Handy.aber ich bin nicht in der Lage zu verstehen, was ist das Problem mit meinem Emulator @MichealStoddart –