Tuesday 11 October 2011

Android populating music files from sdcard as a listview

Android populating music files from sdcard as a listview:

Hi

Here i am giving a example code to populating a list of songs from sdcard.
This code will works in devises and emulator which is created with sdcard.
At first we are using a Content Resolver class to get the sdcard songs. Here we passed the default android audio path as uri for the content resolver. and used a listview to populate the songs. If there is no sdcard it will show the status for the users.

Here we no need to declare any special permissions in the manifest file.

Here is my user interface file
named it as  main.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >  
<ListView android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:id="@+id/PhoneMusicList"></ListView>
</LinearLayout>

and my java file is named as AudioList.java


package org.std;
import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class AudioList extends Activity {
      ListView musiclist;
      Cursor musiccursor;
      String au[];
      /** Called when the activity is first created. */
      @Override
      public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            init_phone_music_grid();
      }

      private void init_phone_music_grid() {
       System.gc();
   
          try{
          ContentResolver contentResolver = getContentResolver();
           Uri uri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
           musiccursor = contentResolver.query(uri, null, null, null, null);
           au=new String[musiccursor.getCount()];
           if (musiccursor == null) {
               // query failed, handle error.
           } else if (!musiccursor.moveToFirst()) {
               // no media on the device
            Toast.makeText(this, "No sdcard presents", Toast.LENGTH_SHORT).show();
           } else {
               int titleColumn = musiccursor.getColumnIndex(android.provider.MediaStore.Audio.Media.DISPLAY_NAME);
               int idColumn = musiccursor.getColumnIndex(android.provider.MediaStore.Audio.Media._ID);
               for(int i=0;i<musiccursor.getCount();i++)
               {
                String thisTitle = musiccursor.getString(titleColumn);
                    System.out.println("raghu  "+thisTitle);
                    au[i]=thisTitle;
                    musiccursor.moveToNext();
               }
            musiclist = (ListView) findViewById(R.id.PhoneMusicList);
         musiclist.setAdapter(new MusicAdapter(getApplicationContext()));
         musiclist.setOnItemClickListener(musicgridlistener);
           }
          }
          catch(Exception e){
          System.out.println("No sdcard presents");
          }

      }

      private OnItemClickListener musicgridlistener = new OnItemClickListener() {
            public void onItemClick(AdapterView parent, View v, int position,long id) {
                  System.gc();
            Toast.makeText(AudioList.this, "Clicked item is: "+au[position], Toast.LENGTH_SHORT).show();
            }
      };

      public class MusicAdapter extends BaseAdapter {
            private Context mContext;

            public MusicAdapter(Context c) {
                  mContext = c;
            }

            public int getCount() {
                  return au.length;
            }

            public Object getItem(int position) {
                  return position;
            }

            public long getItemId(int position) {
                  return position;
            }

            public View getView(int position, View convertView, ViewGroup parent) {
                  System.gc();
                  TextView tv = new TextView(mContext.getApplicationContext());
                  if (convertView == null) {
                        tv.setText(au[position]);
                  } else
                        tv = (TextView) convertView;
                  return tv;
            }
      }
}

the output may like this:




2 comments: