Lire une musique - java android [Résolu/Fermé]

Signaler
-
 tomme68 -
Bonjour à tous !

Je suis en train de développer une application android en java.
J'aimerais entre autre créer une fonction qui prendrait en paramètre un nom d'artiste et un titre de chanson qui pourrait vérifier dans la bibliothèque musicale du téléphone si la chanson est présente (et si oui, qui la lancerait sur le player android ou dans mon appli).

J'ai l'impression que ma solution se trouve vers la classe Mediatore(audio) mais je n'arrive vraiment pas à comprendre comment faire ...

Auriez vous une idée ? Merci d'avance !

4 réponses

Messages postés
4760
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
16 août 2020
1 098
'lut, t'as du manquer une lettre, c'est pas "Mediatore" mais MediaStore. Et oui, c'est de de coté qu'il faut regarder:
Cursor c = getContentResolver().query(
            MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
            new String[] { MediaStore.Audio.Media._ID,
                           MediaStore.Audio.Media.DATA,
                           MediaStore.Audio.Media.ARTIST,
                           MediaStore.Audio.Media.ALBUM,
                           MediaStore.Audio.Media.DISPLAY_NAME }, "1=1", null, null);
Ceci te retournera un objet Cursor te permettant de naviguer dans les résultats de cette requête (c'est une base de données d'ailleurs) contenant, dans l'ordre, les colonnes de l'ID de la musique, son chemin d'accès, l'artiste, l'album et le titre. Tu itères dessus comme ceci:
while (cursor.moveToNext()) {
    String artiste = c.getString(2);
    String titre = c.getString(4);
}
c.close(); // A ne pas oublier
Mais ça c'est pour avoir l'intégralité de la médiathèque, il est possible d'être plus performant et ne demander que les artistes, puis les titres de l'artiste X ou Y, mais c'est plus complexe. Surtout que ces requêtes plus sophistiquées nécessitent d'avoir le nom exacte d'artiste, trouvé à partir de la liste
MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI
, eux même trouvés selon ce que tu cherches.
Merci pour ta réponse rapide et détaillée : ça répond parfaitement à mon problème!
Merci encore et bonne journée :)
En fait je me rends compte que c'est pas tout à fait résolu :D
Dans ma boucle qui parcourt le cursor, si je veux m'arrêter sur une musique et la lire, comment faire ?
Je n'arrive pas à lier la classe MediaPlayer et MediaStore.
En effet, je ne vois que la fonction setDataSource qui demande le chemin absolu du fichier mp3 pour le lire par la suite, ce qui ne m'intéresse pas.

A bientôt :)
Messages postés
4760
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
16 août 2020
1 098
"ce qui ne m'intéresse pas": Tu comptes la lire dans ton appli ou grâce à un lecteur externe? Si c'est dans ton appli, tu dois utiliser
MediaPlayer.setDataSource(c.getString(1))
(vu que la colonne n°2 (indice 1) est le chemin); et faire un
break;
pour casser la boucle et éviter de faire du traitement en trop si tu met le code ci-dessus directement dans ta boucle (ce que je ne te conseille pas).
Merci énormément, tout marche parfaitement maintenant :)

Bonne soirée !