|
||
|
![]() |
![]() |
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 |
![]() |
|
Herramientas |
#1
|
||||
|
||||
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(); 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? |
|
#2
|
||||
|
||||
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. |
#3
|
||||
|
||||
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. |
#4
|
||||
|
||||
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. |
![]() |
![]() |
||||||
|