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
new
alla canzone da ascoltare; - play
stop
pause
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
getCurrentPosition
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
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 stop
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 play getDuration