wake-up-neo.com

Android MediaPlayer Stop and Play

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.

25
Mohammad Hammad

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;
           }
        }
    }
51
Mario

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

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.

4
Javier

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