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
El patrón de desbloqueo es una medida de seguridad que tienen algunos teléfonos inteligentes para evitar el acceso al di[...]
En esta tercera parte del tutorial crearemos la interfaz de usuario GUI (VISTA) para el sistema de gestión de stock. Tom[...]
Continuando con los tutoriales sobre fragmentos en android, en esta oportunidad veremos como añadir Fragments dinámicame[...]
El JDK (Java Development Kit) tra una herramienta llamada native2ascii la cual permite convertir un fichero de una codif[...]
Segunda y ultima parte del post dedicado a la creación de un microservicio en lenguaje java utilizando el framework Spar[...]
En este y un segundo post desarrollaremos un microservicio java utilizando el framework Spark que implementara las funci[...]