Reproducir archivos de audio en nuestras aplicaciones android.
Necesitamos
Paso 1. Proyecto
Crea un proyecto nuevo android en Eclipse llamado «JMPlayer»
En la carpeta «RES», crea una nueva carpeta llamada «RAW» y pega el archivo MP3 dentro de ella, como se ve en la imagen siguiente:
Paso 2: Interfaz
Abre el archivo activity_main.xml y pega el siguiente código:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <TextView android:id="@+id/tvMsg" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/app_name" android:gravity="center" android:textSize="32sp" /> <Button android:id="@+id/btnPlay" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/str_play" /> <Button android:id="@+id/btnPause" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/str_pause" /> <Button android:id="@+id/btnStop" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/str_stop" /> <TextView android:id="@+id/tvTime" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/app_name" android:textSize="18sp" /> <SeekBar android:id="@+id/skSong" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
También debes crear los siguientes string en la carpeta «RES/VALUES/»
<string name="str_play">PLAY</string> <string name="str_pause">PAUSE</string> <string name="str_stop">STOP</string>
Nuestra interfaz se debe ver como la siguiente imagen:
Paso 3. Código
Para reproducir archivos MP3 haremos uso de la clase MediaPlayer que también nos permite reproducir vídeos. La clase completa del MainActivity es:
package com.bolivia.jmplayer; import android.media.MediaPlayer; import android.os.Bundle; import android.os.Handler; import android.app.Activity; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.SeekBar; import android.widget.TextView; public class MainActivity extends Activity{ private TextView tvMsg; private Button btnPlay; private Button btnPause; private Button btnStop; private SeekBar skSong; private TextView tvTime; private MediaPlayer mPlayer = null; private Handler skHandler = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //-- begin mPlayer = MediaPlayer.create(MainActivity.this, R.raw.onnanokootokonoko); tvMsg = (TextView) findViewById(R.id.tvMsg); btnPlay = (Button) findViewById(R.id.btnPlay); btnPause = (Button) findViewById(R.id.btnPause); btnStop = (Button) findViewById(R.id.btnStop); skSong = (SeekBar) findViewById(R.id.skSong); tvTime = (TextView) findViewById(R.id.tvTime); //----------- button PLAY btnPlay.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(!mPlayer.isPlaying()) { mPlayer.start(); tvMsg.setText("PLAY"); } } }); //----------- button PAUSE btnPause.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(mPlayer.isPlaying()) { mPlayer.pause(); tvMsg.setText("PAUSE"); } } }); //----------- button STOP btnStop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (mPlayer != null) { mPlayer.stop(); mPlayer.release(); mPlayer = MediaPlayer.create(MainActivity.this, R.raw.onnanokootokonoko); tvMsg.setText(":)"); } } }); //--- Se coloca el tiempo de duracion y se inicia el seek bar tvTime.setText( getHRM(mPlayer.getDuration()) ); skSong.setMax(mPlayer.getDuration()); skSong.setProgress(mPlayer.getCurrentPosition()); //cada segundo se actualiza el estado del seek bar skHandler.postDelayed(updateskSong, 1000); //-- end }//end:onCreate //se hace uso de un hilo para actualizar el progreso de la reproducción Runnable updateskSong = new Runnable() { @Override public void run() { skSong.setProgress( mPlayer.getCurrentPosition() ); tvTime.setText( getHRM(mPlayer.getDuration()) + " - " + getHRM(mPlayer.getCurrentPosition()) ); skHandler.postDelayed(updateskSong, 1000); } }; /** * Método que convierte milisegundos a Hora:Minuto:Segundo * @param int milliseconds * @return String HH:MM:SS * */ private String getHRM(int milliseconds ) { int seconds = (int) (milliseconds / 1000) % 60 ; int minutes = (int) ((milliseconds / (1000*60)) % 60); int hours = (int) ((milliseconds / (1000*60*60)) % 24); return ((hours<10)?"0"+hours:hours) + ":" + ((minutes<10)?"0"+minutes:minutes) + ":" + ((seconds<10)?"0"+seconds:seconds); } /** * Cuando la actividad ya no es visible por el usuario, * se detiene el reproductor * */ @Override protected void onStop() { super.onStop(); if (mPlayer != null) { mPlayer.stop(); mPlayer.release(); mPlayer = MediaPlayer.create(MainActivity.this, R.raw.onnanokootokonoko); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } }
Ejecuta para probar la aplicación:
Proyecto completo AQUI
BorderPane es un layout que distribuye los nodos hijos en 5 posiciones TOP, LEFT, BOTTOM, RIGHT y CENTER Los nodos hijos[...]
En un post anterior vimos como utilizar GSON para serializar un objeto java en JSON, en esta oportunidad se vera el proc[...]
En este post veremos como enviar solicitudes GET y POST a un API RestFul desde un dispositivo con android. Nuestra apli[...]
ImageMagick es un software de código abierto multiplataforma que contiene una serie de herramientas para leer, mostrar,[...]
HeidiSQL es un software libre y de código abierto que permite conectarse a servidores MySQL, MariaDB, Percona Server, Mi[...]
LibGDX nos permite hacer uso de archivos de sonido muy fácilmente, cuenta con dos tipos de manejo de archivos, estos son[...]