ToggleButton für Musik On/Off

  • 4 Antworten
  • Letztes Antwortdatum
U

UchihaSevenfold

Neues Mitglied
0
hey Leute,

ich hab da ein kleines Problem mit einem ToggletButton. Der ToggleButton befindet sich im PauseMenue des Spiels und soll die Musik Stumm schalten können.

Bis jetzt bin ich soweit, dass ich das wenn ich das PauseMenue aufrufe und dann die Musik auch An und ausschalten kann so oft ich will das läuft perfekt.

Wenn ich jedoch die Musik AUS schalte - Zum Spiel zurueck kehre - Dann Wieder ins PauseMenu gehe und dann die Musik wieder einschalten möchte passiert nichts mehr . Wo liegt da das Problem?


Code:
public class MainActivity extends ActionBarActivity implements OnClickListener {
	
	
	private MediaPlayer mpbackground;
	private Dialog dialog;
	private Button resume;
	private Button quit;
	private ToggleButton sound;
	
	private boolean dialogIsActive=false;
	

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        
        Button button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(this);
        
        mpbackground = MediaPlayer.create(this,R.raw.lied);
		mpbackground.setLooping(true);
		
		dialog = new Dialog(this,android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
		dialog.setContentView(R.layout.pausescreen);
		dialog.hide(); 
		initialize();
		
		
   
    }
   


    private void initialize() {
		resume = (Button) dialog.findViewById(R.id.btnResume);
		resume.setOnClickListener(this);
		
		
		sound = (ToggleButton)dialog.findViewById(R.id.btnSound);
		sound.setOnCheckedChangeListener(new OnCheckedChangeListener() {
			
			
	
			
			@Override
			public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
				
				
				if (!isChecked){
					
					try {
						mpbackground.prepare();
					}catch (IllegalStateException e) {
						e.printStackTrace();
						
					} catch (IOException e) {
						e.printStackTrace();
					}
				
				       mpbackground.start();
				       
				       
				}
				else
				{
					mpbackground.stop();
				}
			
				
			}
		
		});
		
	}


    @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;
    }

   
    @Override
	public void onClick(View v) {
		
		setContentView(new SpielView(this));
		playBackgroundSound();
		
		switch (v.getId()){
		case   R.id.btnResume:
			dialog.hide();
			
			
		break;
		
		}
		
	}
	
	
	@Override 
	public void onBackPressed() {
		
		dialogState(); 
		
	}
				
				
			
	public void dialogState() { 
		if (dialogIsActive) 
		{
			dialog.hide();
			dialogIsActive = false;
			
	    } else if (!dialogIsActive) { 
				
				dialog.show(); 
				dialogIsActive = true; } }
	
	
	 public void playBackgroundSound() { 
	  	 
		 if (mpbackground != null && !mpbackground.isPlaying())
		 { 
	  		  try { mpbackground.start(); 
	  		  
	  		  } catch (IllegalStateException e) {
	  		  
	  			  e.printStackTrace(); 
	  		  } 
	  		  
		 
		 } 
	}



	}
 
Du startest deine Musik in onCreate(). Die Methode wird nur einmal durchlaufen, nämlich bevor du deine Aktivity zum ersten mal startest.

Wenn du deine Activity in den Background schickst, wird sie beim Neustart nicht wieder aufgerufen, weil die Activity ja schon da ist. Du solltest den Start des MediaPlayer in die Methode onResume() verlegen.

App und Aktivities haben einen Lifecycle. Managing the Activity Lifecycle | Android Developers
 
Hey danke für deine Antwort ! Ich verstehe was du meinst aber wo kommt die onResume() methode denn hin ? ich hab die mal darein geschrieben und diese Zeilen

Code:
mpbackground = MediaPlayer.create(this,R.raw.lied);
  		mpbackground.setLooping(true);

In die OnResume() Methode gepackt. Problem is nun der er die applikation nicht mal mehr startet auf meinem Tablet.

Ps: ich hab die onResume methode unter die onCreate Methode gepackt. Was hab ich falsch gemacht ?

Ach ja und es ging nur public void onResume()

liebe grüße

Der ursprüngliche Beitrag von 15:32 Uhr wurde um 16:43 Uhr ergänzt:

Also nun stürzt es zwar nich mehr ab aber is der selbe fehler wie vorher. hab ich onResume() an der falschen stelle aufgerufen oder is der inhalt falsch oder was muss ich tun =( das is nun die klasse


Code:
public class MainActivity extends ActionBarActivity implements OnClickListener {
	
	
	private MediaPlayer mpbackground;
	private Dialog dialog;
	private Button resume;
	private Button quit;
	private ToggleButton sound;
	private Button leftOne;
	private ImageView shark;
	private boolean dialogIsActive;
	
	
	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        
        Button button = (Button) findViewById(R.id.links1);
        button.setOnClickListener(this);
        
        dialog = new Dialog(this,android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
		dialog.setContentView(R.layout.pausescreen);
		dialog.hide(); 
		initialize();
		
	}
   
	private void initialize() {
		resume = (Button) dialog.findViewById(R.id.btnResume);
		resume.setOnClickListener(this);
		
		
		sound = (ToggleButton)dialog.findViewById(R.id.btnSound);
		sound.setOnCheckedChangeListener(new OnCheckedChangeListener() {
			
	@Override
	public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
				
				
	if (!isChecked){
					
		try {
			mpbackground.prepare();
		}catch (IllegalStateException e) {
					e.printStackTrace();
						
					} catch (IOException e) {
						e.printStackTrace();
					}
				
				       mpbackground.start();
				       
				       
			}
			else
			{
					mpbackground.stop();
				}
			
				
			}
		
		});
		
		
		//leftOne = (Button)findViewById(R.id.links1);
		//leftOne.setOnClickListener(this);
		
    
    
    }
 

    @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;
    }

   
    @Override
	public void onClick(View v) {
		
    	
		   
		setContentView(new SpielView(this));
		playBackgroundSound();
		
		switch (v.getId()){
		case   R.id.btnResume:
			dialog.hide();
			
			
		break;
		
		
		}
		
		
	}
	
	
	@Override 
	public void onBackPressed() {
		
		dialogState(); 
		
	}
	
	
				
			
	public void dialogState() { 
		
		if (dialogIsActive) 
		{
			
			dialog.hide();
			dialogIsActive = false;
			
	    } else if (!dialogIsActive) { 
				
				dialog.show(); 
				dialogIsActive = true; 
		} 
	}
	
	@Override
	public void onResume() {
		super.onResume();
		mpbackground = MediaPlayer.create(this,R.raw.lied);
  	    mpbackground.setLooping(true);
	
	
	}
	
	
	 public void playBackgroundSound() { 
	  	 
		 if (mpbackground != null && !mpbackground.isPlaying())
		 { 
	  		  try { mpbackground.start(); 
	  		  
	  		  } catch (IllegalStateException e) {
	  		  
	  			  e.printStackTrace(); 
	  		  } 
	  		  
		 
		 } 
	}

	 

}
 
Der Code wird automatisch an der Stelle ausgeführt, an der er implementiert wurde. Das System erkennt "Zurück" oder "Home" gedrückt und die jeweilige Methode wird ausgeführt, somit spielt die Reihenfolge da keine Rolle.

Rufe doch mal in deiner onResume
Code:
playBackgroundSound()
auf.
 
Zuletzt bearbeitet:
huhu !! Also das hat nicht funktioniert da kackt die app direkt ab =(

Mir ist aber was aufgefallen.

Das Problem ist ja : Ich gehe mit dem zurueck button des tablets also via onBackPressed ins Pausemenue - schalte die Musik ab - druecke auf RESUME dann bin ich wieder im spiel - gehe WIEDER via onbackPressed ins pausemenue - die Musik lässt sich NICHT mehr anschalten.

WENN ich aber ins Pausemenue gehe und die musik ausschalte und NICHT mit meinem RESUME BUTTON sondern dem onbackpressed zum spiel zurueck kehre und dann halt wieder ins pausemenue gehe DANN lässt sich die musik wieder einschalten !!! häää?

Also muss es ja an dem RESUME button liegen ! Ich habe schon rum probiert aber bisher keine möglichkeit gefunden =( haettet ihr vll nch eine idee ?
 
Zurück
Oben Unten