wake-up-neo.com

Media Player Start Stop Start

Ich mache eine neue Android-Sound-Anwendung. Ich habe eine anklickbare Schaltfläche erstellt, um beim Anklicken einen Sound abzuspielen. Ich möchte aber auch, dass der Sound beim zweiten Klicken nicht mehr abgespielt wird. Dieser Teil funktioniert jetzt einwandfrei, hier ist das Problem, wenn ich erneut auf die Schaltfläche klicke, um den Ton erneut abzuspielen, wird er nicht abgespielt, der Media Player ist vollständig gestoppt. Ich habe in Foren gesucht, aber ich kann anscheinend keine Antwort finden, die mir helfen könnte. Hier ist meine Aktivität:

  MediaPlayer mpButtonClick1;
MediaPlayer mpButtonClick2;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.prvi);

    final MediaPlayer mpButtonClick1 = MediaPlayer.create(this, R.raw.spalshm);
    final MediaPlayer mpButtonClick2 = MediaPlayer.create(this, R.raw.splashs);


    Button dugme = (Button) findViewById(R.id.dugme);
    dugme.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if (mpButtonClick1.isPlaying()) {
                mpButtonClick1.stop();
                mpButtonClick1.reset();

            }
            else {              
                mpButtonClick1.start();

            }


        }   

    });

Wenn ich versuche, mpButtonClick1.prepare () zu schreiben; Ich erhalte die Fehlermeldung Unhandled Exception Type IOE exception

12
Slim C.

Ändere deine Klasse mit dem folgenden Code:

reset(); entfernen.

init gut alle komponenten:

MediaPlayer mpButtonClick1;
MediaPlayer mpButtonClick2;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.prvi);

     mpButtonClick1 = MediaPlayer.create(this, R.raw.spalshm);
     mpButtonClick2 = MediaPlayer.create(this, R.raw.splashs);


    Button dugme = (Button) findViewById(R.id.dugme);
    dugme.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if (mpButtonClick1.isPlaying()) {
                mpButtonClick1.stop();
             }
            else {              
                mpButtonClick1.start();
            }
         }   

    });
3

Versuchen Sie, pause anstelle von stop zu verwenden.

Grund: Wenn Sie die MediaPlayer anhalten, können Sie sie später fortsetzen. Wenn Sie jedoch stop verwenden, funktioniert fast keine andere Methode und Sie müssen den MediaPlayer erneut vorbereiten (oder eine neue erstellen).

enter image description here

Weitere Infos: hier und hier

PS: Vergessen Sie nicht, den Speicher freizugeben, wenn Sie die Ressourcen nicht mehr benötigen.

9
gian1200

Versuchen Sie Folgendes: 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;
       }
    }
}
7
Shylendra Madda

Eine einfache Lösung besteht darin, Pause anstelle von Stopp zu verwenden und den Anfang des Songs zu suchen.

0

Meiner Erfahrung nach muss ich, wenn ich mehrmals spielen muss und möglicherweise ein Spiel anhalten muss, um ein anderes Spiel zu starten (wie bei mehreren Schaltflächen), einfach einen anderen Spieler erstellen und sicherstellen, dass ich die Ressourcen für das vorherige freigebe . Zum Anhalten einfach benutzen

mediaPlayer.stop(); 

Verwenden Sie zum Spielen jedoch Folgendes (passen Sie die Protokollierung an Ihre spezifischen Anforderungen an), um Ihren Player zu erstellen/neu zu erstellen:

private boolean createMediaPlayer()
{
    if (mediaPlayer!=null)
    {
        if(mediaPlayer.isPlaying())
        {
            mediaPlayer.stop();
            mediaPlayer.reset();
            mediaPlayer.release();
            mediaPlayer=null;
        }

    }
    mediaPlayer = new MediaPlayer();
    mediaPlayer.setVolume(1f, 1f);
    try
    {
        mediaPlayer.setAudioStreamType(Interop.PRIMARY_STREAM);
        mediaPlayer.setDataSource(m_soundFile);
        mediaPlayer.prepare();
        return true;
        // Interop.logDebug(TAG + "-loadAudio: SUCCESS" + m_soundFile);
    } catch (Exception e)
    {
        Interop.logError(TAG + "-LoadAudio for Clic Sound: audioPlayer prepare failed for current file: " + m_soundFile);
        Interop.logError(TAG + "-Exception: " , e);
        return false;
    }
}

und als zu verwenden

if (createMediaPlayer())
    mediaPlayer.start();

dadurch wird die ordnungsgemäße Freigabe der vom Media Player verwendeten Ressourcen sichergestellt.

0
Gogu CelMare

Hey bitte benutze folgendes

für stop -> media player mp.seekTo(0); mp.pause();

nochmal zum starten einfach mp.start () aufrufen;

0
Lalit kumar

Sie rufen mpButtonClick1.reset () nach mpButtonClick1.stop () auf - tun Sie das nicht:

if (mpButtonClick1.isPlaying()) {
    mpButtonClick1.stop();
    mpButtonClick1.reset(); //<--------- calling reset(), remove this line
}

Die Dokumente für reset () sagen:

Setzt den MediaPlayer auf den nicht initialisierten Zustand zurück. Nachdem Sie diese Methode aufgerufen haben, müssen Sie sie erneut initialisieren, indem Sie die Datenquelle festlegen und prepare () aufrufen.

Entfernen Sie mpButtonClick1.reset () und es sollte funktionieren.

Denken Sie daran, dass MediaPlayer als Zustandsmaschine funktioniert. Wenn Sie also Methoden in der falschen Reihenfolge aufrufen, treten Probleme auf. Bitte lesen Sie über MediaPlayer hier und hier .

0
Melquiades

Ich weiß, dass diese Frage ziemlich alt ist, aber kürzlich, als ich Android lernte, blieb ich an diesem Punkt stecken und fand eine sehr einfache Lösung, die ich mit allen teilen möchte.

Anstatt zu versuchen Stopp oder Zurücksetzen des Mediums, können Sie einfach Zurücksuchen zur Startposition .

mediaPlayer.seekTo(0);

Als Referenz poste ich auch meinen Code unten:

public class MainActivity extends AppCompatActivity {

    MediaPlayer mp;

    public void play(View view) {
        mp.start();
    }

    public void pause(View view) {
        mp.pause();
    }

    public void stop(View view) {
        // this seeks to the beginning of the file
        mp.seekTo(0);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mp = MediaPlayer.create(this, R.raw.sample_audio);
    }
}
0
av-sharma