Anfänger MediaPlayer Start Stop

  • 4 Antworten
  • Neuester Beitrag
Diskutiere Anfänger MediaPlayer Start Stop im Android App Entwicklung im Bereich Betriebssysteme & Apps.
N

N3cron

Fortgeschrittenes Mitglied
Hallo zusammen. Bin mit meiner 2.ten app dran, und es möchte nicht klappen.
Ich hoffe, es wird mir nochmals so gut geholfen wie bei der 1ten.
Also. Ich habe/versuche eine art soundpack zu erstellen.
Die einzelnen Sounds sollen per Button gestartet werden, und 1 Button für Stop.
Folgende Probleme habe ich.

Kann die im moment nur 2 Sounds starten, welche überlagert dann abgespielt werden.

Stop button reagiert garnicht. Benutze dafür den mp.stop(); befehl.

Für mir unverständlich, da es mit dem Start button ja genauso funktioniert.

Waere schoen wenn ihr mir den oder die gefundenen Fehler ein wenig erklaeren koenntet.

Ich stelle zuerst einmal nur die Java rein. Denke es besteht nur darin der Fehler.

Danke


HTML:
package com.example.xxxxxxx;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    public MediaPlayer mp;
    Button start, stop, start2;

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

        start = (Button) findViewById(R.id.start);
        start2 = (Button) findViewById(R.id.start2);
        stop = (Button) findViewById(R.id.stop);

        start.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                MediaPlayer mp = MediaPlayer.create(getApplicationContext(),
                        R.raw.e1m3);

                mp.start();

            }

        });
        
        start2.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                MediaPlayer mp = MediaPlayer.create(getApplicationContext(),
                        R.raw.e1m4);

                mp.start();

            }

        });
        
        
        stop.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if(mp!=null && mp.isPlaying()){
                    mp.stop();
                }
            }
        });
    }
}
 
Zuletzt bearbeitet:
U

Unicate

Erfahrenes Mitglied
Du erstellst gerade für jeden Sound einen eigenen MediaPlayer.

Stop wird nicht aufgerufen, da du die Membervariable mp nie setzt (also null ist)
Deine verwendeten Variablen zum starten des Players sind lokale Variablen, keine Member

Code:
    public MediaPlayer _mp1, _mp2;
    Button start, stop, start2;

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

        start = (Button) findViewById(R.id.start);
        start2 = (Button) findViewById(R.id.start2);
        stop = (Button) findViewById(R.id.stop);

        start.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                _mp1 = MediaPlayer.create(getApplicationContext(),
                        R.raw.e1m3);

                _mp1 .start();

            }

        });
        
        start2.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                _mp2 = MediaPlayer.create(getApplicationContext(),
                        R.raw.e1m4);

                _mp2.start();

            }

        });
        
        
        stop.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if(_mp1!=null && _mp1.isPlaying()){
                    _mp1.stop();
                }
            }
        });
    }
 
N

N3cron

Fortgeschrittenes Mitglied
Hi. Danke für deine Aussage. Ich sehe meinen Fehler!
Ein rat und schon kann es weiter gehen. Danke.

Könntest du mir nur deinen Satz mit dem "Stop" erklaeren?

Habe schon mehrere seiten durch bezüglich tutorial usw.
Viele benutzen aber wieder ne andere Richtung an Befehlen.
 
U

Unicate

Erfahrenes Mitglied
In deinem Quellcode wurden 3 verschiedene Variablen namens "mp" angelegt. 2 lokale Variablen in den ClickListenern und eine Membervariable im Klassenkopf.

Da die Variable im Klassenkopf an keiner Stelle beschrieben wird, ist sie null.

Um das Besser sehen zu können, benennt man Membervariablen immer anders als lokale.

Ich persönlich mache einen "_" vor den Variablennamen um erkennen zu können, dass es sich um einen Member handelt. Andere (und so auch z.B. Google) schreiben ein "m" vor die Variable.
Bsp: "mVariable" oder "_variable"
 
N

N3cron

Fortgeschrittenes Mitglied
Alles klar. Gerafft. Sowas nenne ich Hilfe. Da macht das lernen Spass. Bin noch Anfänger und suche schon was laenger meine Fehler.

Danke!