title: How to get songs from album/Artist in android,using MediametadataRetriever?
body: <p>First of all i am a newbie and secondly i know there exists a solution for "How to get songs from album  in android?" but that is by using cursor and MediaStore and i have used MediametadataRetriever and its totally different  i haven't used hashmaps and all.....so its getting a bit difficult....please any solutions for this???without using hashmaps and mediastore???</p>
  
  <p>here is the code i have used to display all songs and its artists ..........</p>
  
  <pre><code>import java.io.File;
  import java.io.FileFilter;
  import java.io.FilenameFilter;
  import java.io.Serializable;
  import java.lang.reflect.Array;
  import java.util.ArrayList;
  import java.util.List;
  
  import android.annotation.SuppressLint;
  import android.content.Context;
  import android.content.Intent;
  import android.graphics.Bitmap;
  import android.graphics.BitmapFactory;
  import android.media.MediaMetadataRetriever;
  import android.media.MediaPlayer;
  import android.net.Uri;
  import android.os.Bundle;
  import android.support.v4.app.Fragment;
  import android.support.v4.app.ListFragment;
  import android.util.DisplayMetrics;
  import android.util.TypedValue;
  import android.view.ContextMenu;
  import android.view.ContextMenu.ContextMenuInfo;
  import android.view.LayoutInflater;
  import android.view.Menu;
  import android.view.MenuItem;
  import android.view.View;
  import android.view.ViewGroup;
  import android.widget.AdapterView;
  import android.widget.AdapterView.AdapterContextMenuInfo;
  import android.widget.AdapterView.OnItemClickListener;
  import android.widget.ArrayAdapter;
  import android.widget.ListView;
  
  
  public class FragmentSongs extends  Fragment implements Serializable {
      AdapterView.AdapterContextMenuInfo info;
  
      @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container,
          Bundle savedInstanceState) {
          View view = inflater.inflate(R.layout.fragment_song, container, false);
          ListView SngList = (ListView) view.findViewById(R.id.SongList);
          registerForContextMenu(SngList);
          File f=new File("/sdcard/Music");
          int j=0;int i=0;
          final ArrayList&lt;SongDetails&gt; Songinfo = getSongsFromDirectory(f);
  
          if (Songinfo.size()&gt;0) {
              for( j=0; j&lt;Songinfo.size();j++) {
                  for ( i=j+1 ; i&lt;Songinfo.size(); i++) { 
                      SongDetails a=Songinfo.get(i);
                      SongDetails b=Songinfo.get(j);
                      if (a.getSong().toLowerCase().compareTo(b.getSong().toLowerCase()) &lt; 0) {
                          Songinfo.set(i,b );
                          Songinfo.set(j,a);
                      }
                   }
               }
  
               SngList.setOnItemClickListener(new OnItemClickListener() { 
                   public void onItemClick(AdapterView a, View v, int position, long id) {
                       Intent intent = new Intent(getActivity(), NowPlaying.class);
                       intent.putParcelableArrayListExtra("Data1",Songinfo);
  
                       intent.putExtra("Data2",position);
                       startActivity(intent);
                   }
               });
  
               SngList.setAdapter(new CustomAdapter(Songinfo));
               return view;
           } else {
               return null;
           }
     }
  
     public ArrayList&lt;SongDetails&gt; getSongsFromDirectory(File f) {
         MediaMetadataRetriever mmr = new MediaMetadataRetriever();
         ArrayList&lt;SongDetails&gt; songs = new ArrayList&lt;SongDetails&gt;();
         Bitmap bitmap2; 
         Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ab);
  
         float ht_px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100, getResources().getDisplayMetrics());
         float wt_px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100, getResources().getDisplayMetrics());
  
         Bitmap bitmap3 = Bitmap.createScaledBitmap(bmp, (int) ht_px, (int) wt_px, true);
         byte[] rawArt = null;
         Bitmap art;
         BitmapFactory.Options bfo=new BitmapFactory.Options();
         if (!f.exists() || !f.isDirectory()) {    
             return songs;
         }
         File[] files = f.listFiles(new Mp3Filter());
         for(int i=0; i&lt;files.length; i++) { 
             if (files[i].isFile()) { 
                 mmr.setDataSource(files[i].getPath());
                 rawArt = mmr.getEmbeddedPicture();
                 SongDetails detail=new SongDetails(); 
                 if ( rawArt != null) {
                     bitmap2=BitmapFactory.decodeByteArray(rawArt, 0, rawArt.length, bfo);
                     bitmap2 = Bitmap.createScaledBitmap(bitmap2, (int) ht_px, (int) wt_px, true);
                     detail.setIcon(bitmap2);
                 } else {  
                     detail.setIcon(bitmap3);
                 }
  
                 detail.setSong(files[i].getName()); 
                 detail.setArtist(files[i].getName());
                 detail.setArtist( mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST)); 
                 detail.setAlbum( mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM)); 
                 detail.setPath2( files[i].getPath()) ;
                 songs.add(detail); 
              } else if (files[i].isDirectory()) { 
                  songs.addAll(getSongsFromDirectory(files[i])); 
              } 
  
          }
          return songs;
      }
  
      @Override
      public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
          super.onCreateContextMenu(menu, v, menuInfo);      
          info = (AdapterContextMenuInfo) menuInfo;
          menu.add(Menu.NONE, v.getId(), 0, "Play");
          menu.add(Menu.NONE, v.getId(), 0, "Delete");
          menu.add(Menu.NONE, v.getId(), 0, "Queue Item");                  
      }
  
      @Override
      public boolean onContextItemSelected(MenuItem item) {
          if (item.getTitle() == "Play") {
  
          } else if (item.getTitle() == "Delete") {
  
          } else if (item.getTitle() == "Queue Item") {
  
          } else {
              return false;
          }
              return true;
      }
  }
  
  class Mp3Filter implements FileFilter {
      public boolean accept(File file) {
          return (file.isDirectory()||file.getName().endsWith(".mp3")|| file.getName().endsWith(".Mp3"));
      }
  }
  </code></pre>