SoundButton stopp

  • 66 Antworten
  • Letztes Antwortdatum
Nicht den logcat, den code

Gesendet von meinem GT-S5660 mit der Android-Hilfe.de App
 
Zuletzt bearbeitet:
Code:
audi1.setOnClickListener (new OnClickListener() {
			public void onClick (View v) { 
				if (mp.isPlaying() == true){
					mp.pause();
		                        mp.seekTo(0);
				        }
			
				else{
				        mp.start();
				}
			}

});

Mach es so dann klappts. Habs schnell mal selber getestet ;)
 
  • Danke
Reaktionen: Jajobe
Sehr schlau den mp einfach zu pausieren und zu 0 zurückzuspulen :thumbup:
Bin jetzt gar nicht auf die Idee gekommen :)

Sent from my GT-I9100 using Android-Hilfe.de App
 
Danke ;)

Mich hat das problem net los gelassen und das Bild hier hat mich auf die Idee gebracht.

MediaPlayer | Android Developers

Nur muss des doch auch über stop gehen aber ich versteh es net wirklich. Werds mir morgen nochmal in Ruhe anschauen. Kann ja net so schwer sein :confused2:
 
So wie ich es "denke" ist das der mp stop ist so als würdest du den Radio abdrehen. Danach musst du prepare() callen um den Radio aufzudrehen und danach start() für die Musik zum starten
Sent from my GT-I9100 using Android-Hilfe.de App
 
Code:
audi1.setOnClickListener (new OnClickListener() {
public void onClick (View v) { 

if(mp.isPlaying() == true){
mp.stop();
mp.reset();
mp = MediaPlayer.create(getApplicationContext(), R.raw.audir8);
}

else{
try {
mp.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mp.start();
}
}

});

So läufts auch aber schmeißt immer ne exception... Nur mit prepare() funktioniert es gar nicht.

Versteh aber immer noch net genau was des Problem is. Hab gelesen das der MediaPlayer sehr empfindlich ist. Deswegen lass ich jetzt die Finger davon bevor ich durchdrehe. Problem is ja gelöst und wenn jemand mehr Ahnung hat bitte mal genau erklären :thumbsup:

Der ursprüngliche Beitrag von 08:47 Uhr wurde um 09:24 Uhr ergänzt:

Code:
public class MainActivity extends Activity {

private static MediaPlayer mp;
Button audi1;

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


audi1=(Button) findViewById (R.id.audi1);

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

audi1.setOnClickListener (new OnClickListener() {
public void onClick (View v) { 

if(mp.isPlaying() == true){stopSound();}

else{startSound();}
}

});
}

private void stopSound(){
mp.stop();
mp.reset();
mp.release();
mp = MediaPlayer.create(getApplicationContext(), R.raw.audir8);
}

private void startSound(){
mp.start();
}
protected void onPause(){
super.onPause();
if(mp.isPlaying() == true){
mp.stop();
mp.reset();
mp.release();
}
}
}

Konnte es doch net lassen. So klappt es jetzt ohne Fehler und so würde ich es auch machen. Beim drehen des Display wird ein neues Objekt erzeugt und das erste läuft als weiter bis zum Ende. Das gleiche beim starten einer neue Avtivity bzw. beenden oder in den Hintergrund schaffen der App. (Deswegen onPause())
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: Jajobe
Also. Ich habe es jetzt probiert. Wenn man nur einen Button hat, funktioniert es super.
Danke nochmals :)

Aber:
Wenn man mehr Button mit jeweils unterschiedlichen Sounds hat funktioniert es irgendwie nicht?!
Da unterstreicht es die befehle:
stopSound
startSound
onPause

rot und schlägt ne Alternative vor, die einfach eine 1 an die jeweiligen Befehle dranhängt. Doch dann stürtzt die App ab, wenn man versucht einen Button zu drücken :/
 
Code:
public class MainActivity extends Activity {
	
	private static MediaPlayer mp,mp1;
	Button audi1,audi2;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		
		audi1=(Button) findViewById (R.id.audi1);
		audi2=(Button) findViewById (R.id.audi2);
		
		mp = MediaPlayer.create(getApplicationContext(), R.raw.audir8);
		mp1 = MediaPlayer.create(getApplicationContext(), R.raw.audir81);
		
		audi1.setOnClickListener (new OnClickListener() {
			public void onClick (View v) { 
				
				if(mp1.isPlaying() == true){stopSound1();}
				
				if(mp.isPlaying() == true){stopSound();}
			
				else{startSound();}
			}

		});	
		
		audi2.setOnClickListener (new OnClickListener() {
			public void onClick (View v) { 
				
				if(mp.isPlaying() == true){stopSound();}
				
				if(mp1.isPlaying() == true){stopSound1();}
			
				else{startSound1();}
			}

		});	
	}
	
	private void stopSound(){
		mp.stop();
		mp.reset();
		mp.release();
		mp = MediaPlayer.create(getApplicationContext(), R.raw.audir8);
	}
	
	private void startSound(){
		mp.start();
	}
	
	private void stopSound1(){
		mp1.stop();
		mp1.reset();
		mp1.release();
		mp1 = MediaPlayer.create(getApplicationContext(), R.raw.audir81);
	}
	
	private void startSound1(){
		mp1.start();
	}
	
	protected void onPause(){
		super.onPause();
		if(mp.isPlaying() == true){
			mp.stop();
			mp.reset();
			mp.release();
		}
		if(mp1.isPlaying() == true){
			mp1.stop();
			mp1.reset();
			mp1.release();
		}
	}
}

Hier in 5 Minuten gebastelt deswegen wird es wahrscheinlich auch eleganter gehen. Ich denke du solltest erstmal versuchen zu verstehen wie der Code mit einem Button funktioniert und dann weiter machen. Wieviel Buttons willst du denn da noch machen?
 
  • Danke
Reaktionen: Jajobe
Mehr als 10 Auf jeden FAll.
Habe aber schon eine Lösung gefunden.
Ich mache für jeden einzelen Button eine neue Seite wo nur ein Soundbutton ist.
Also wenn ich die App öffne, kommt eine Art Inhaltsverzeichnis. Dort kann man dann anklicken welchen man Button man hören möchte, dann öffnet sich eine andere Seite und dann kann man den Sound abspielen :)
 
Code:
public class MainActivity extends Activity {
	
	private static MediaPlayer mp;
	Button audi1,audi2;
	int buttonPlay;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
//		Verhindert ne Exception bei onPause() wenn mp nicht initialisiert ist. 
//		Zum Beispiel wenn kein Button gedrückt wurde oder nach stop().
//		Wert ist -1 da der sicher nicht verwendet wird. 
//		Bei MediaPlayer.create() kannste nehmen was du willst. Dient wie gesagt nur zur
//		initialisierung.
		
		buttonPlay = -1;
		mp = MediaPlayer.create(getApplicationContext(), R.raw.diamonds);
		
		audi1=(Button) findViewById (R.id.button1);
		audi2=(Button) findViewById (R.id.button2);
		
		audi1.setOnClickListener (new OnClickListener() {
			public void onClick (View v) {
				if(buttonPlay == 0){
					mp = MediaPlayer.create(getApplicationContext(), R.raw.diamonds);
					buttonPlay = 1;
					startStopSound();
				}
				else if(buttonPlay == 1){
					startStopSound();
				}
				else {
					startStopSound();
					mp = MediaPlayer.create(getApplicationContext(), R.raw.diamonds);
					buttonPlay = 1;
					startStopSound();
				}
			}
		});	
		
		audi2.setOnClickListener (new OnClickListener() {
			public void onClick (View v) {
				if(buttonPlay == 0){
					mp = MediaPlayer.create(getApplicationContext(), R.raw.umbrella);
					buttonPlay = 2;
					startStopSound();
				}
				else if(buttonPlay == 2){
					startStopSound();
				}
				else {
					startStopSound();
					mp = MediaPlayer.create(getApplicationContext(), R.raw.umbrella);
					buttonPlay = 2;
					startStopSound();
				}
			}
		});
		
	}
	
	private void startStopSound(){ 
		
		if(buttonPlay == -1){
			mp.stop();
			mp.reset();
			mp.release();
			buttonPlay = 0;
		}
		else if(mp.isPlaying() == true){
			mp.stop();
			mp.reset();
			mp.release();
			buttonPlay = 0;
		}
		else{
			mp.start();
			}
	}
	protected void onPause(){
		super.onPause();
		
		if(mp.isPlaying() == true){
		        mp.stop();
			mp.reset();
			mp.release();
			buttonPlay = 0;
					
		}
		
	}
	
}

Hört sich nicht grade so an als wäre des ne gute Lösung. Sorry ;)

Probier mal das hier zu verstehen. Kannst gerne nachfragen wenn du was nicht verstehst. Da musste nur die onClick Methode schreiben und kannst nur "mp" als MediaPlayer Objekt nutzen.

Ich denke das ist die bessere Lösung.
 
  • Danke
Reaktionen: Jajobe
Vielen Dank :thumbsup:
Werde versuchen es zu verstehen.
Ich wollte eigentlich eine App machen mit MOtorsound von verschiedenen Autos.
Deswegen wäre jeder Soundbutton auf einer seperaten Seite von Vorteil, weil dann könnt ich noch technische Daten des Autos,.. daruterschreiben.
Aber da funktioniert es irgendwie gar nicht. Kann nicht einmal einen Sound abspielen. App stürtzt immer ab, obwohl ich es wie beschrieben gemacht habe.
Gibt es da eine Möglichkeit?
 
Zuletzt bearbeitet:
Zeig mal den Code von MainActivity, neue Activity und den Logcat.
 
Activity im Manifest deklariert?

Sent from my GT-I9100 using Android-Hilfe.de App
 
Kann ich erst alles morgen um 18 Uhr reinstellen. Vorher komme ich nicht an den Computer.
 
Main Activity:

Code:
package com.jannik.bestcarmotorsounds;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;

public class MainActivity extends Activity {

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

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}
	
	
	public void onButtonClick (View view){
		setContentView (R.layout.audir81);
	}

}




Seite 1 Activity:

Code:
package com.jannik.bestcarmotorsounds;

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 Audir81Activity extends Activity {

	private static MediaPlayer mp;
	Button audi1;
	int buttonPlay;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		
		buttonPlay = -1;
		mp = MediaPlayer.create(getApplicationContext(), R.raw.audir8);
		
		audi1=(Button) findViewById (R.id.button1);
		
		audi1.setOnClickListener (new OnClickListener() {
			public void onClick (View v) {
				if(buttonPlay == 0){
					mp = MediaPlayer.create(getApplicationContext(), R.raw.audir8);
					buttonPlay = 1;
					startStopSound();
				}
				else if(buttonPlay == 1){
					startStopSound();
				}
				else {
					startStopSound();
					mp = MediaPlayer.create(getApplicationContext(), R.raw.audir8);
					buttonPlay = 1;
					startStopSound();
				}
			}
		});	
		
		
	}
	
	private void startStopSound(){ 
		
		if(buttonPlay == -1){
			mp.stop();
			mp.reset();
			mp.release();
			buttonPlay = 0;
		}
		else if(mp.isPlaying() == true){
			mp.stop();
			mp.reset();
			mp.release();
			buttonPlay = 0;
		}
		else{
			mp.start();
			}
	}
	protected void onPause(){
		super.onPause();
		
		if(mp.isPlaying() == true){
		        mp.stop();
			mp.reset();
			mp.release();
			buttonPlay = 0;
					
		}
		
	}
	
}


Log:

Code:
04-11 15:07:46.572: I/dalvikvm(658): threadid=3: reacting to signal 3
04-11 15:07:46.722: I/dalvikvm(658): Wrote stack traces to '/data/anr/traces.txt'
04-11 15:07:47.062: I/dalvikvm(658): threadid=3: reacting to signal 3
04-11 15:07:47.102: I/dalvikvm(658): Wrote stack traces to '/data/anr/traces.txt'
04-11 15:07:47.303: D/gralloc_goldfish(658): Emulator without GPU emulation detected.
04-11 15:07:57.512: I/dalvikvm(690): threadid=3: reacting to signal 3
04-11 15:07:57.812: E/dalvikvm(690): Unable to open stack trace file '/data/anr/traces.txt': Permission denied
04-11 15:07:57.982: I/dalvikvm(690): threadid=3: reacting to signal 3
04-11 15:07:58.032: I/dalvikvm(690): Wrote stack traces to '/data/anr/traces.txt'
04-11 15:07:58.442: D/gralloc_goldfish(690): Emulator without GPU emulation detected.
04-11 15:07:58.492: I/dalvikvm(690): threadid=3: reacting to signal 3
04-11 15:07:58.522: I/dalvikvm(690): Wrote stack traces to '/data/anr/traces.txt'
04-11 15:08:45.373: D/AndroidRuntime(690): Shutting down VM
04-11 15:08:45.373: W/dalvikvm(690): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
04-11 15:08:45.412: E/AndroidRuntime(690): FATAL EXCEPTION: main
04-11 15:08:45.412: E/AndroidRuntime(690): java.lang.IllegalStateException: Could not find a method mpButtonClick(View) in the activity class com.jannik.bestcarmotorsounds.MainActivity for onClick handler on view class android.widget.Button with id 'audi1'
04-11 15:08:45.412: E/AndroidRuntime(690): 	at android.view.View$1.onClick(View.java:3031)
04-11 15:08:45.412: E/AndroidRuntime(690): 	at android.view.View.performClick(View.java:3511)
04-11 15:08:45.412: E/AndroidRuntime(690): 	at android.view.View$PerformClick.run(View.java:14105)
04-11 15:08:45.412: E/AndroidRuntime(690): 	at android.os.Handler.handleCallback(Handler.java:605)
04-11 15:08:45.412: E/AndroidRuntime(690): 	at android.os.Handler.dispatchMessage(Handler.java:92)
04-11 15:08:45.412: E/AndroidRuntime(690): 	at android.os.Looper.loop(Looper.java:137)
04-11 15:08:45.412: E/AndroidRuntime(690): 	at android.app.ActivityThread.main(ActivityThread.java:4424)
04-11 15:08:45.412: E/AndroidRuntime(690): 	at java.lang.reflect.Method.invokeNative(Native Method)
04-11 15:08:45.412: E/AndroidRuntime(690): 	at java.lang.reflect.Method.invoke(Method.java:511)
04-11 15:08:45.412: E/AndroidRuntime(690): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-11 15:08:45.412: E/AndroidRuntime(690): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-11 15:08:45.412: E/AndroidRuntime(690): 	at dalvik.system.NativeStart.main(Native Method)
04-11 15:08:45.412: E/AndroidRuntime(690): Caused by: java.lang.NoSuchMethodException: mpButtonClick [class android.view.View]
04-11 15:08:45.412: E/AndroidRuntime(690): 	at java.lang.Class.getConstructorOrMethod(Class.java:460)
04-11 15:08:45.412: E/AndroidRuntime(690): 	at java.lang.Class.getMethod(Class.java:915)
04-11 15:08:45.412: E/AndroidRuntime(690): 	at android.view.View$1.onClick(View.java:3024)
04-11 15:08:45.412: E/AndroidRuntime(690): 	... 11 more
04-11 15:08:46.072: I/dalvikvm(690): threadid=3: reacting to signal 3
04-11 15:08:46.082: I/dalvikvm(690): Wrote stack traces to '/data/anr/traces.txt'


Sobald ich auf den Button auf der 2. Seite klicke kommt, dass er unerwartet gestoppt hat.
Warum auch immer
 
Dein Problem ist das du keine neue Activity startest sondern einfach nur das Layout wechselst. Falls du die Audir81Activity richtig im Manifest deklariert hast sollte es so gehen.

Code:
	public void onButtonClick (View view){
		Intent intent = new Intent(getApplicationContext(), Audir81Activity.class);
		startActivity(intent);
	}

Schau dir das mal an, damit du verstehst um was es geht.

Starting Another Activity | Android Developers
 
Ist es so richtig eingeebaut in die Manifest?

Code:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.jannik.bestcarmotorsounds"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.jannik.bestcarmotorsounds.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.jannik.bestcarmotorsounds.Audir81Activity"
            android:label="@string/title_activity_audir81" >
        </activity>
    </application>

</manifest>

Des macht es ja automatisch, wenn ich des richtig verstehe?!
 
ja, das passt so. Das macht er automatisch wenn man es richtig macht. Man weiß ja net wie du es gemacht hast ;) Ich hab am Anfang die MainActivity.java kopiert und dann war sie net eingetragen :lol:
 
Phu glück gehabt ;)
Aber es funktiniert immer noch nicht. Wenn ich jetzt auf den ersten Button klicke öffnet sich nicht die zweite seite irgendwie, sondern nur der erste Button spielt sound ab.

Habe mal schnell ein Video gemacht, weil alles andere wäre zu kompliziert :)
http://youtu.be/141TOD1PZ50
 
Zuletzt bearbeitet:
In der Audir81Activity steht "setContentView(R.layout.activity_main);".

Da muss dein Layout rein von der Audir81Activity "R.layout.audir81".

Bin mir auch noch net so sicher ob des klappt mit der onClickMethode in der MainActivity. Aber mach erstmal.. ;)
 
Zurück
Oben Unten