Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 50 di 97
  • livello avanzato
Indice lezioni

MediaPlayer: riprodurre file audio

Utilizzare gli strumenti nativi per riprodurre risorse multimediali, come file audio MP3
Utilizzare gli strumenti nativi per riprodurre risorse multimediali, come file audio MP3
Link copiato negli appunti

La multimedialità è una delle facoltà più importanti di un dispositivo mobile. Basti pensare a quanto siano state innovative e di successo le introduzioni della radio e del lettore MP3 sui telefoni cellulari.

Anche Android, quindi, ha un suo componente integrato per la fruizione di contenuti multimediali: il MediaPlayer.

In questo capitolo si imparerà ad utilizzarlo integrandolo rapidamente all'interno di un'app. Con poche righe di codice creeremo un lettore MP3 rudimentale ma funzionante, in grado di riprodurre una sola canzone, che per sempicità salveremo tra le risorse con ID
R.id.canzone. Partendo dall'esempio che vedremo, estenderne l'utilizzo a raccolte di file musicali risulterà abbastanza semplice.

I metodi che sfrutteremo della classe MediaPlayer sono i seguenti:

  • create: serve per ottenere un riferimento all'istanza del MediaPlayer. Non ne creeremo direttamente uno nuovo mediante l'operatore new di Java, ma faremo in modo che sia il sistema stesso ad instanziarlo. Tra i parametri di questo metodo passeremo anche l'ID della risorsa che corrisponde
    alla canzone da ascoltare;
  • play, stop e pause: dopo tutti i mangianastri, videoregistratori e lettori CD che hanno affollato la
    nostra vita sin da piccoli, appare quasi superfluo spiegare a cosa servano questi tre metodi. A scanso di equivoci, specifichiamo che essi consentono rispettivamente di avviare, arrestare e mettere in pausa la fruizione del contenuto multimediale;
  • getDuration e getCurrentPosition: forniscono informazioni temporali sull'esecuzione del contenuto. Il primo restituisce
    la durata complessiva della canzone mentre con il secondo otteniamo l'intervallo tempo che separa l'inizio della canzone con la posizione temporale attualmente in riproduzione.

Il lettore MP3

Nel layout del nostro lettore inseriremo una SeekBar (che mostrerà l'avanzamento della musica in esecuzione) ed i pulsanti che consentono di utilizzare i controlli fondamentali:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TableRow
android:gravity="center"
android:padding="20dp">
<SeekBar
android:id="@+id/bar"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content" />
</TableRow>
<TableRow
android:gravity="center"
android:padding="20dp">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="play"
android:text="Play" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="pause"
android:text="Pause" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="stop"
android:text="Stop" />
</TableRow>
</TableLayout>

Il risultato finale è mostrato nella figura seguente.

All'interno dell'Activity, il metodo onCreate fisserà i riferimenti principali alla SeekBar e al MediaPlayer:

public class MainActivity extends Activity
{
private MediaPlayer mp=null;
private Handler handler = new Handler();
private double startTime = 0;
private SeekBar sk=null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sk=(SeekBar) findViewById(R.id.bar);
mp=MediaPlayer.create(this, R.raw.canzone );
}
. . .
. . .
}

I metodi play, pause e stop sono molto semplici, a dimostrazione della facilità di interazione con il MediaPlayer:

private Runnable updateBar = new Runnable() {
public void run()
{
startTime = mp.getCurrentPosition();
sk.setProgress((int)startTime);
handler.postDelayed(this, 100);
}
};
public void play(View v)
{
mp.start();
sk.setMax((int) mp.getDuration());
handler.postDelayed(updateBar,100);
}
public void pause(View v)
{
mp.pause();
}
public void stop(View v)
{
mp.stop();
}

Nel codice presentato, si vede che per richiedere le tre operazioni di base del Mediaplayer – start, stop, pause – è sufficiente richiamare i metodi omonimi.

Tra di essi si inserisce il meccanismo di aggiornamento della barra di progresso. Il suo avanzamento rappresenta l'andamento della riproduzione. Essa è realizzata in maniera piuttosto semplice: si è usato un handler temporizzato che legge ogni 100 millisecondi la posizione attuale di riproduzione, ed attui il conseguente aggiornamento della barra. Il valore massimo cui il progresso può arrivare è la durata totale del brano, e viene impostato all'interno del metodo play utilizzando come fonte di informazione il risultato del metodo getDuration del Mediaplayer.

Ti consigliamo anche