09.02.2017 Views

creez-des-applications-pour-android

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

6.5 Le multimédia<br />

6.5.1.3 Le lecteur multimédia<br />

6.5.1.3.1 Permissions La première chose qu’on va faire, c’est penser aux permissions qu’il<br />

faut demander. Il n’y a pas de permission en particulier <strong>pour</strong> la lecture ou l’enregistrement ; en<br />

revanche, certaines fonctionnalités nécessitent quand même une autorisation. Par exemple, <strong>pour</strong><br />

le streaming, il faut demander l’autorisation d’accéder à internet :<br />

<br />

De même, il est possible que vous vouliez faire en sorte que l’appareil ne se mette jamais en veille<br />

de façon à ce que l’utilisateur puisse continuer à regarder une vidéo qui dure longtemps sans être<br />

interrompu :<br />

<br />

6.5.1.3.2 La lecture La lecture de fichiers multimédia se fait avec la classe MediaPlayer. Sa<br />

vie peut être représentée par une machine à état, c’est-à-dire qu’elle traverse différents états et<br />

que la transition entre chaque état est symbolisée par <strong>des</strong> appels à <strong>des</strong> métho<strong>des</strong>.<br />

[[question]] | Comme <strong>pour</strong> une activité ?<br />

Mais oui, exactement, vous avez tout compris !<br />

Je <strong>pour</strong>rais très bien expliquer toutes les étapes et toutes les transitions, mais je doute que cela<br />

puisse vous être réellement utile, je ne ferais que vous embrouiller, je vais donc simplifier le processus.<br />

On va ainsi ne considérer que cinq états : initialisé quand on crée le lecteur, préparé quand<br />

on lui attribue un média, démarré tant que le média est joué, en pause quand la lecture est mise<br />

en pause ou arrêté quand elle est arrêtée, et enfin terminé quand la lecture est terminée.<br />

Tout d’abord, <strong>pour</strong> créer un MediaPlayer, il existe un constructeur par défaut qui ne prend<br />

pas de paramètre. Un lecteur ainsi créé se trouve dans l’état initialisé. Vous pouvez ensuite<br />

lui indiquer un fichier à lire avec void setDataSource(String path) ou void<br />

setDataSource(Context context, Uri uri). Il nous faut ensuite passer de l’état initialisé<br />

à préparé (c’est-à-dire que le lecteur aura commencé à lire le fichier dans sa mémoire<br />

<strong>pour</strong> pouvoir commencer la lecture). Pour cela, on utilise une méthode qui s’appelle simplement<br />

void prepare().<br />

[[attention]] | Cette méthode est synchrone, elle risque donc de bloquer le thread dans lequel elle<br />

se trouve. Ainsi, si vous appelez cette méthode dans le thread UI, vous risquez de le bloquer. En<br />

général, si vous essayez de lire dans un fichier cela devrait passer, mais <strong>pour</strong> un flux streaming il<br />

ne faut jamais faire cela. De manière générale, il faut appeler prepare() dans un thread différent<br />

du thread UI. Vous pouvez aussi appeler la méthode void prepareAsync(), qui est asynchrone<br />

et qui le fait de manière automatique <strong>pour</strong> vous.<br />

Il est aussi possible de créer un lecteur multimédia directement préparé avec une méthode de<br />

type create :<br />

// public static MediaPlayer create (Context context, int resid)<br />

MediaPlayer media = MediaPlayer.create(getContext(), R.raw.file);<br />

// public static MediaPlayer create (Context context, Uri uri)<br />

media = MediaPlayer.create(getContext(), Uri.parse("file://<strong>android</strong>_asset/fichier.mp4");<br />

media = MediaPlayer.create(getContext(), Uri.parse("file://sdcard/music/fichier.mp3");<br />

media = MediaPlayer.create(getContext(), Uri.parse("http://www.site_trop_cool.com/musiq<br />

media = MediaPlayer.create(getContext(), Uri.parse("rtsp://www.site_trop_cool.com/strea<br />

425

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!