Cuando se programa un juego por lo general se requiere escuchar dentro del juego una musica constante. Para ello se genera un clase para que este audio constante pueda ejecutarse en un loop infinito
import android.app.Activity; import android.os.Bundle; import cl.aro.android.AudioConstante; public class Main extends Activity{ AudioConstante audio; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // startService(new Intent(this, servicio.class)); audio = getAudioConstante(R.raw.uno); audio.play(); setContentView(new juegoView(this)); } protected AudioConstante getAudioConstante(int id) { return new AudioConstante(getBaseContext(), id); } }
El codigo de la clase de audio sería
package cl.aro.android; import android.content.Context; import android.media.MediaPlayer; public class AudioConstante { private MediaPlayer mediaPlayer; private boolean estaSonando = false; private boolean enLoop = false; public AudioConstante(Context ctx, int resID) { mediaPlayer = MediaPlayer.create(ctx, resID); mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { estaSonando = false; if (enLoop) { mp.start(); } } }); mediaPlayer.start(); } public synchronized void play() { if (estaSonando) return; if (mediaPlayer != null) { estaSonando = true; mediaPlayer.start(); } } public synchronized void stop() { try { enLoop = false; if (estaSonando) { estaSonando = false; mediaPlayer.pause(); } } catch (Exception e) { System.err.println("Error"); } } public synchronized void loop() { enLoop = true; estaSonando = true; mediaPlayer.start(); } public void release() { if (mediaPlayer != null) { mediaPlayer.release(); mediaPlayer = null; } } }