2017-07-19 4 views
0

J'essaye de lister toutes les chansons dans le stockage interne et le stockage externe pour mon application comme vue de liste. J'utilise le code ci-dessous pour récupérer des chansonsComment obtenir tous les fichiers de musique stockés dans le stockage interne et le stockage externe dans Android à l'aide de MediaStore?

ContentResolver musicResolver = getContentResolver(); 
    Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
    Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null); 
    if(musicCursor!=null && musicCursor.moveToFirst()){ 
     //get columns 
     int titleColumn = musicCursor.getColumnIndex 
       (android.provider.MediaStore.Audio.Media.TITLE); 
     int idColumn = musicCursor.getColumnIndex 
       (android.provider.MediaStore.Audio.Media._ID); 
     int artistColumn = musicCursor.getColumnIndex 
       (android.provider.MediaStore.Audio.Media.ARTIST); 

     int durationColumn=musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media.DURATION); 


     do { 
      try { 
       long thisId = musicCursor.getLong(idColumn); 
       String thisTitle = musicCursor.getString(titleColumn); 
       String thisArtist = musicCursor.getString(artistColumn); 
       String duration = musicCursor.getString(durationColumn); 
       if (!thisArtist.equalsIgnoreCase("<unknown>")) { 
        //save track 
       } 

      } catch (Exception e) { 

      } 
     } 
     while (musicCursor.moveToNext()); 

Le code ci-dessus avec succès toutes les aller chercher des chansons dans le stockage externe, mais ne sont pas les chansons stockées aller chercher dans la mémoire interne. Ceci est un problème dans les appareils comme Samsung Galaxy S8 où il n'y a pas de stockage externe. J'ai aussi essayé le curseur avec le dessous uri

musicUri = MediaStore.Audio.Media.INTERNAL_CONTENT_URI; 

Cela me va chercher les sonneries de l'appareil et des tonalités SMS qui ne sont pas ce que je dois.

J'ai rencontré des questions similaires dans StackOverflow et les réponses ne me permettent pas de résoudre ce problème.

Aidez-nous s'il vous plaît. Merci.

Répondre

0

Je pense que le mot EXTERNAL est confus. Il est utilisé pour adresser la mémoire interne Le processus de numérisation entrera toute votre musique dans la base de données multimédia, qu'il s'agisse d'un média interne ou externe (assurez-vous qu'il n'y a pas de fichier .nomedia caché dans le dossier). Le code ci-dessous devrait renvoyer toute votre musique. Si ce n'est pas le cas, je soupçonne que votre base de données multimédia n'est pas entièrement remplie.

 public Cursor getAllTracks(Context context) { 
    // gets all tracks 
    Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
    ContentResolver cr = context.getContentResolver(); 
    final String[] columns = {track_id ,track_no, artist, track_name, 
      album, duration, path, year, composer}; 
    return cr.query(uri, columns, null, null, null); 
} 
+0

Je suis en train de faire la même étape ci-dessus, mais ce ne me aller chercher toutes les pistes. :( – hybrid

+0

-vous voir tous vos pistes en utilisant le stock Android lecteur de musique? – Theo

+0

Vous pouvez essayer gratuitement mon nouveau Playlist Manager Au fait, je suppose que vos pistes sont toutes en mp3 ou en flac. Android ignore les extensions .wma – Theo

0

Cela fonctionne pour moi. essayez cette

Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
    String selection = MediaStore.Audio.Media.IS_MUSIC + "!=0"; 
    Cursor cursor = getContentResolver().query(uri, null, selection, null, null); 
    if (cursor != null) { 
     if (cursor.moveToFirst()) { 
      do { 
       String name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME)); 
       String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST)); 
       String url = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA)); 

       SongInfo s = new SongInfo(name, artist, url); 
       _songs.add(s); 

      } while (cursor.moveToNext()); 

     } 

     cursor.close(); }