IntroductionLe système Androïde permet de supporter divers types de fichiers médias. On peut ainsi intégrer des images , des fichiers audio et vidéo dans nos applications. Les fichiers multimédia peuvent avoir de différentes sources :
Les applications d’androïde contenant des fichiers multimédia interagissent alors avec les utilisateurs et le système afin d'obtenir la performance attendue. Utilisation de la classe MediaPlayerLa classe MediaPlayer est la classe la plus utilisée dans la programmation de nos applications. un objet de cette classe peut chercher , décoder et lire un fichier multimédia quelque soit sa source. Les étapes à suivre
Le Diagramme des étatsCe diagramme montre le cycle de vie et les états d'un objet de la classe MediaPlayer : Ressources Locales des Fichiers MédiasLire les fichiers multimédia disponibles comme « Raw Ressource » enregistrés dans notre application. (res/raw/directory) Ou L'exemple suivant montre comment on peut lire un fichier audio sauvegardé dans un "folder" appelé raw dans l'application : 01. public class MainActivity extends Activity implements OnCheckedChangeListener { 02. MediaPlayer Audio_1; 03. Context context = null ; 04. @Override 05. protected void onCreate(Bundle savedInstanceState) { 06. super .onCreate(savedInstanceState); 07. setContentView(R.layout.activity_main); 08. Button play = (Button) findViewById(R.id.play); 09. Button stop = (Button) findViewById(R.id.stop); 10. 11. play.setOnClickListener ( new View.OnClickListener() { 12. @Override 13. public void onClick(View v) { 14. try { 15. Audio_1 = MediaPlayer.create(MainActivity. this , R.raw.song); 16. Audio_1.setAudioStreamType(AudioManager.STREAM_MUSIC); 17. Audio_1.prepare(); 18. } catch (IllegalStateException e) { 19. e.printStackTrace(); 20. } catch (IOException e) { 21. e.printStackTrace(); 22. } 23. Audio_1.start(); 24. } 25. }); 26. stop.setOnClickListener ( new View.OnClickListener() { 27. @Override 28. public void onClick(View v) { 29. Audio_1.release(); 30. Audio_1 = null ; 31. } 32. }); 33. } 34. @Override 35. public boolean onCreateOptionsMenu(Menu menu) { 36. // Inflate the menu; this adds items to the action bar if it is present. 37. getMenuInflater().inflate(R.menu.main, menu); 38. return true ; 39. } 40. @Override 41. public void onCheckedChanged(CompoundButton arg0, boolean arg1) { 42. // TODO Auto-generated method stub 43. } 44. } URIs InternesLire les fichiers multimédia disponibles localement dans le système ( enregistrés sur votre « device » mais dans d’autres applications) en utilisant les URIs Ou Ou tout simplement utiliser la classe Intent comme le montre l'exemple suivant : 01. public class MainActivity extends Activity implements OnCheckedChangeListener { 02. @Override 03. protected void onCreate(Bundle savedInstanceState) { 04. super .onCreate(savedInstanceState); 05. setContentView(R.layout.activity_main); 06. Button play = (Button) findViewById(R.id.play); 07. Button stop = (Button) findViewById(R.id.stop); 08. play.setOnClickListener ( new View.OnClickListener() { 09. @Override 10. public void onClick(View v) { 11. Intent serv = new Intent(); 12. serv.setAction(android.content.Intent.ACTION_VIEW); 13. File file = new File( "/storage/sdcard0/media/audio/song2.mp3" ); 14. serv.setDataAndType(Uri.fromFile(file), "audio/*" ); 15. startActivity(serv); 16. } 17. }); 18. stop.setOnClickListener ( new View.OnClickListener() { 19. @Override 20. public void onClick(View v) { 21. finish(); 22. } 23. }); 24. } 25. @Override 26. public boolean onCreateOptionsMenu(Menu menu) { 27. // Inflate the menu; this adds items to the action bar if it is present. 28. getMenuInflater().inflate(R.menu.main, menu); 29. return true ; 30. } 31. @Override 32. public void onCheckedChanged(CompoundButton arg0, boolean arg1) { 33. // TODO Auto-generated method stub 34. } 35. } URL ExternesLire les fichiers multimédia en ligne disponibles sur une connexion réseau (internet) par exemple : 01. public class MainActivity extends Activity implements MediaPlayer.OnPreparedListener, MediaPlayer.OnErrorListener { 02. MediaPlayer Audio_3; 03. @Override 04. protected void onCreate(Bundle savedInstanceState) { 05. super .onCreate(savedInstanceState); 06. setContentView(R.layout.activity_main); 07. Button stop = (Button) findViewById(R.id.stop); 08. String url = "http://freedownloads.last.fm/download/288181172/Nocturne.mp3" ; 09. Audio_3 = new MediaPlayer(); 10. Audio_3.setAudioStreamType(AudioManager.STREAM_MUSIC); 11. try { 12. Audio_3.setDataSource(url); 13. } catch (IllegalArgumentException e) { 14. e.printStackTrace(); 15. } catch (SecurityException e) { 16. e.printStackTrace(); 17. } catch (IllegalStateException e) { 18. e.printStackTrace(); 19. } catch (IOException e) { 20. e.printStackTrace(); 21. } 22. Audio_3.setOnPreparedListener( this ); 23. Audio_3.prepareAsync(); 24. Audio_3.setOnErrorListener( this ) ; 25. stop.setOnClickListener ( new View.OnClickListener() { 26. @Override 27. public void onClick(View v) { 28. Audio_3.release(); 29. Audio_3 = null ; 30. } 31. }); 32. } 33. @Override 34. public boolean onCreateOptionsMenu(Menu menu) { 35. // Inflate the menu; this adds items to the action bar if it is present. 36. getMenuInflater().inflate(R.menu.main, menu); 37. return true ; 38. } 39. @Override 40. public boolean onError(MediaPlayer arg0, int arg1, int arg2) { 41. return false ; 42. } 43. @Override 44. public void onPrepared(MediaPlayer mp) { 45. mp.start(); 46. } 47. } Les formats des Fichiers Médias supportés par AndroïdeLes formats des fichiers multimédia doivent être parmi la liste des formats média supportés par Androïde : Avantage de l'utilisation de préparation asynchroneLa solution est offerte par : Puis quand le fichier multimédia sera prêt la méthode va appler la methode suivante : Traitement des erreurs asynchronesDans les opérations synchrones les erreurs sont signalées par le code d'erreur. Alors qu'avec les méthodes asynchrones il faut s'assurer que notre application soit convenablement signalée des erreurs. En MediaPlayer on implémente l'interface MediaPlayer.OnErrorListener. Puis on utilise la méthode : Qui fait appel à : Libération de la MediaPlayerPour libérer les ressources accrochées à une instance de MediaPlayer on utilise les deux méthodes de la classe MediaPlayer : Pour s’assurer de la libération de la MediaPlayer on ne peut pas compter seulement sur le travail du " garbage collector " il est conseillé d'utiliser la methode suivante ( surtout quand on utilise un Service) References |