23 - Reproducción, pausa, continuación y detención de un archivo de audio.

Ya se encuentra disponible el nuevo tutorial para aprender android con el nuevo entorno Android Studio propuesto por Google y que remplaza a Eclipse.


Problema:

Confeccionar una aplicación que permita Iniciar un archivo mp3, detener, continuar, detener en forma definitiva y activación o no de la reproducción en forma circular.

Crear un archivo mp3 con el programa Audacity contando del 1 al 30.

Primero creamos un proyecto y definimos los 5 botones y métodos a ejecutar cuando se presionen los botones respectivos:

play mp3 android

Creamos la carpeta raw y almacenamos en la misma el archivo mp3 creado previamente. Refrescamos la carpeta raw para actualizar el archivo mp3:

play mp3 android

El código fuente es:

package com.androidya.proyecto020;

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {
    MediaPlayer mp;
    Button b1;
    int posicion = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        b1 = (Button) findViewById(R.id.button5);
    }

    @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 destruir() {
        if (mp != null)
            mp.release();
    }

    public void iniciar(View v) {
        destruir();
        mp = MediaPlayer.create(this, R.raw.numeros);
        mp.start();
        String op = b1.getText().toString();
        if (op.equals("No reproducir en forma circular"))
            mp.setLooping(false);
        else
            mp.setLooping(true);
    }

    public void pausar(View v) {
        if (mp != null && mp.isPlaying()) {
            posicion = mp.getCurrentPosition();
            mp.pause();
        }
    }

    public void continuar(View v) {
        if (mp != null && mp.isPlaying() == false) {
            mp.seekTo(posicion);
            mp.start();
        }
    }

    public void detener(View v) {
        if (mp != null) {
            mp.stop();
            posicion = 0;
        }
    }

    public void circular(View v) {
        detener(null);
        String op = b1.getText().toString();
        if (op.equals("No reproducir en forma circular"))
            b1.setText("reproducir en forma circular");
        else
            b1.setText("No reproducir en forma circular");
    }
}

Primero definimos tres atributos uno de la clase MediaPlayer para administrar el archivo mp3, un entero donde se almacena la posición actual de reproducción en milisegundos (para poder continuarla en el futuro) y la referencia de un objeto de la clase Button:


    MediaPlayer mp;
    Button b1;
    int  posicion=0;

El método destruir verifica con un if si el objeto de la clase MediaPlayer está creado procede a liberar recursos del mismo llamando al método release:

    public void destruir() {
        if(mp!=null) 
            mp.release();
    }

El método iniciar que se ejecuta al presionar el botón "Iniciar" primero llama al método destruir (para el caso que el mp3 este en ejecución actualmente) seguidamente creamos un objeto de la clase MediaPlayer llamando al método create (en este hacemos referencia al archivo que copiamos a la carpeta raw) Llamamos al método start. Por último extraemos el texto del quinto botón y verificamos si la reproducción debe ejecutarse en forma circular (en forma indefinida una y otra vez):

    public void iniciar(View v) {
        destruir();
        mp = MediaPlayer.create(this,R.raw.numeros);
        mp.start();
        String op=b1.getText().toString();
        if (op.equals("No reproducir en forma circular")) 
            mp.setLooping(false);
        else
            mp.setLooping(true);                
    }

El método pausar verifica que el objeto de la clase MediaPlayer este creado y en ejecución, en caso afirmativo recuperamos la posición actual de reproducción y llamamos seguidamente al método pause:

    public void pausar(View v) {
        if(mp != null && mp.isPlaying()) {
            posicion = mp.getCurrentPosition();
            mp.pause();
        }        
    }

El método continuar verifica que el objeto de la clase MediaPlayer este creado y la propiedad isPlaying retorne false para proceder a posicionar en que milisegundo continuar la reproducción:

    public void continuar(View v) {
        if(mp != null && mp.isPlaying()==false) {
            mp.seekTo(posicion);
            mp.start();
        }        
    }

El método detener interrumpe la ejecución del mp3 e inicializa el atributo posicion con cero:

    public void detener(View v) {
        if(mp != null) {
            mp.stop();
            posicion = 0;
        }        
    }

Cuando se presiona el botón que cambia si la reproducción se efectúa en forma circular o no procedemos a extraer su texto y según dicho valor almacenamos el valor opuesto:

    public void circular(View v) {
        detener(null);
        String op=b1.getText().toString();
        if (op.equals("No reproducir en forma circular")) 
            b1.setText("reproducir en forma circular");
        else
            b1.setText("No reproducir en forma circular");        
    }

Este proyecto lo puede descargar en un zip desde este enlace: proyecto020.zip

Retornar