2016-03-19 2 views
1

J'ai développé une application de lecteur multimédia simple dans android. Il a une vue de liste pour charger tous les morceaux dans la carte d'écart-type, la barre de recherche et le bouton de lecture. J'ai besoin de créer une galerie d'album pour mon application (comme dans google play music app). J'ai utilisé ce code pour obtenir toutes les chansons de carte SD,Comment créer une liste de lecture miniature pour un lecteur de musique dans Android?

public ArrayList<String> GetFiles(String DirectoryPath) { 
     ArrayList<String> MyFiles = new ArrayList<String>(); 
     File f = new File(DirectoryPath); 
     f.mkdirs(); 
     File[] files = f.listFiles(); 
     if (files.length == 0) { 
      return null; 
     }else { 
      for (int i=0; i<files.length; i++) 
       MyFiles.add(files[i].getName()); 
     } 

     return MyFiles; 
    } 
  1. Comment améliorer ce code pour retourner le nom de la chanson et de l'album-art?

  2. Comment créer une vue miniature pour chaque chanson?

    _________ 
    |   | 
    | image | 
    |   | 
    |_________| 
    | title | 
    |_________| 
    

Répondre

0

Vous devez utiliser résolveur contenu.


Uri uri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
      // Perform a query on the content resolver. The URI we're passing specifies that we 
      // want to query for all audio media on external storage (e.g. SD card) 
      Cursor cur = contentResolver.query(uri, null, 
        MediaStore.Audio.Media.IS_MUSIC + " = 1", null, null); 
      if (cur == null) { 
       Log.e(TAG, "Failed to retrieve music: cursor is null :-("); 
       subscriber.onError(new Throwable("Failed to retrieve music: cursor is null :-(")); 
       return; 
      } 
      if (!cur.moveToFirst()) { 
       subscriber.onError(new Throwable("No results. :(Add some tracks!")); 

       Log.e(TAG, "Failed to move cursor to first row (no query results)."); 
       return; 
      } 
      int artistColumn = cur.getColumnIndex(MediaStore.Audio.Media.ARTIST); 
      int titleColumn = cur.getColumnIndex(MediaStore.Audio.Media.TITLE); 
      int albumColumn = cur.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID); 
      int durationColumn = cur.getColumnIndex(MediaStore.Audio.Media.DURATION); 
      int idColumn = cur.getColumnIndex(MediaStore.Audio.Media._ID); 
      int dataColumn = cur.getColumnIndex(MediaStore.Audio.Media.DATA); 
      ArrayList<LocalTrack> tracks = new ArrayList<>(); 

      do { 
       Log.i(TAG, "ID: " + cur.getString(idColumn) + " Title: " + cur.getString(titleColumn)); 
       tracks.add(new LocalTrack(
         cur.getLong(idColumn), 
         cur.getString(artistColumn), 
         cur.getString(titleColumn), 
         cur.getLong(albumColumn), 
         cur.getLong(durationColumn), 
         cur.getString(dataColumn))); 
      } while (cur.moveToNext()); 
      Log.i(TAG, "Done querying media. MusicRetriever is ready."); 
      cur.close(); 


      for (LocalTrack localTrack : tracks) { 
       localTrack.setArtPath(findAlbumArt(localTrack)); 
      } 
      subscriber.onNext(tracks); 

public String findAlbumArt(LocalTrack localTrack) { 
    Cursor cursor = contentResolver.query(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, 
      new String[]{MediaStore.Audio.Albums._ID, MediaStore.Audio.Albums.ALBUM_ART}, 
      MediaStore.Audio.Albums._ID + "=?", 
      new String[]{String.valueOf(localTrack.getAlbum())}, 
      null); 

    String path = null; 
    if (cursor != null) { 
     if (cursor.moveToFirst()) { 
      path = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ART)); 
      // do whatever you need to do 
      cursor.close(); 
     } 
    } 

    return path; 
} 
+0

Merci. Je vais essayer cela –

+0

Si vous voulez voir le tout projet: https://github.com/joxad/zikobot La partie que vous pouvez utiliser: https://github.com/joxad/zikobot/blob/master/ app/src/main/java/com/startogamu/zikobot/module/content_resolver/manager/LocalMusicManager.java Il utilise poignard 2, mais vous devriez être en mesure de mettre à jour à vos besoins – Joxad

+0

Merci. j'essaierai –