Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #1  
Viejo 28/08/14, 22:58:49
Array

[xs_avatar]
manolazo manolazo no está en línea
Miembro del foro
 
Fecha de registro: jun 2012
Localización: Madrid
Mensajes: 219
Modelo de smartphone: Samsung Galaxy S7 edge
Tu operador: Pepephone
Variable static y MediaPlayer

Buenas

Tengo activity_A en donde:

Código:
public static MediaPlayer sonido,

       @Override
	protected void onCreate(Bundle savedInstanceState) {		
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_modosseleccion);
		sonido =  MediaPlayer.create(this, R.raw.button54);	
	}

Paso a activity B:

En activity_B hago referencia a la variable static soundClick1 para empezar el sonido

Código:
       @Override
	protected void onResume() {		
		super.onResume();	
		
		if(soundPrefs.getBoolean("sonido", true))
			Activity_A.sonido.start();
Cuando entro en la activity_B suena la musica , pero cuando pulso back vuelvo a A y vuelvo a entrar en activity_B , ya no se escucha.

Código:
        @Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
	
	    if ((keyCode == KeyEvent.KEYCODE_BACK)) {
	      if(!gameOver){		    	
	        AlertDialog.Builder alertbox = new AlertDialog.Builder(contexto);
	        alertbox.setIcon(R.drawable.boton_tick);
	        alertbox.setTitle(R.string.deseasalir);
	        alertbox.setPositiveButton(R.string.si, new DialogInterface.OnClickListener() {
	            public void onClick(DialogInterface arg0, int arg1) { 	            	      			
	        			gameOver=true;	    	        			
	        			
	        			if(soundPrefs.getBoolean("sonido", true))
	        				ActivityModosSeleccion.sonido.stop();	        			
	    				finish();			        		
	            }
	        });

Es decir al parar con stop al salir de B y al volver a entrar en A en resume() con start() ya no funciona.

Alguna idea?
Responder Con Cita


  #2  
Viejo 28/08/14, 23:15:35
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
Si miras la documentación del MediaPlayer verás que después de un stop() tienes que hacer un prepare() antes de poder volver a hacer un start().

Y por cierto, en Android no es bueno usar variables static, si quieres tener una variable accesible desde toda la aplicación usa un Application.
Responder Con Cita
  #3  
Viejo 29/08/14, 00:39:15
Array

[xs_avatar]
manolazo manolazo no está en línea
Miembro del foro
 
Fecha de registro: jun 2012
Localización: Madrid
Mensajes: 219
Modelo de smartphone: Samsung Galaxy S7 edge
Tu operador: Pepephone
pensé que lo mejor para pasar objetos entre activities era usar parcelable pero para acceder a una variable statica de otra activity no pasaba nada.

De hecho en Android Application Framework FAQ http://developer.android.com/guide/faq/framework.html pone lo siguiente:

How do I pass data between Activities/Services within a single application?

Y una de las formas es a traves de A public static field/method y no dicen que sea malo.

Sin embargo si he leido lo que dices en otros sitios que es mejor evitar variables staticas, ya no se que pensar.

Es que se me ocurrio usar variables static en la activity A , inicializarlas en A y en onDestroy usar release(); en vez de poner en todas las activitys 6 variables MediaPlayer inicializarlas en onResume y en onDestroy liberarlas ya que si no las libero en onDestroy se petaba la memoria en terminales antiguos.
Responder Con Cita
  #4  
Viejo 29/08/14, 01:55:24
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
Para pasar variables si se suelen usar variables estáticas, pero porque van a ser de "consumo inmediato", y sólo cuando son tan grandes que vas a exceder el tiempo de procesamiento del Bundle si las pasases así, aunque no dentro de la propia Activity, sino en una clase propia destinada a eso y que va a ser temporal. Pero bueno, es un rollazo que no viene al caso.

Y yo no te he dicho que crees las 6 MediaPlayer, te he dicho que pongas 1 solo MediaPlayer pero en el objeto Application, porque será de instancia, estará vivo durante toda la ejecución de la app, y será accesible por todas las Activities.
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 20:14:34 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /