user3125778
user3125778

Reputation: 1

View audio in specific folder

I want to view sounds to the specific folder in sd card. Folders name "Audiorecorder". I can view all recorders in sd card. But I want to view only my folders' audio. I used this codes. Please help me.

package com.example.seskaydedici;
import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class listelesinifi extends Activity {

    ListView musiclist;
    Cursor musiccursor;
    int music_column_index;
    int count;
    MediaPlayer mMediaPlayer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listele);
        init_phone_music_grid();

    }


     private void init_phone_music_grid() {
         System.gc();
         String[] proj = { MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Video.Media.SIZE };
         musiccursor = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
proj, null, null, null);
         count = musiccursor.getCount();
         musiclist = (ListView) findViewById(R.id.listView1);
         musiclist.setAdapter(new MusicAdapter(getApplicationContext()));

         musiclist.setOnItemClickListener(musicgridlistener);
         mMediaPlayer = new MediaPlayer();
   }

   private OnItemClickListener musicgridlistener = new OnItemClickListener() {
         public void onItemClick(AdapterView parent, View v, int position,
long id) {
               System.gc();
               music_column_index = musiccursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA);
               musiccursor.moveToPosition(position);
               String filename = musiccursor.getString(music_column_index);

               try {
                     if (mMediaPlayer.isPlaying()) {
                           mMediaPlayer.reset();
                     }
                     mMediaPlayer.setDataSource(filename);
                     mMediaPlayer.prepare();
                     mMediaPlayer.start();
               } catch (Exception e) {

               }
         }
   };

   public class MusicAdapter extends BaseAdapter {
         private Context mContext;

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

         public int getCount() {
               return count;
         }

         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());
               String id = null;
               if (convertView == null) {
                     music_column_index = musiccursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME);
                     musiccursor.moveToPosition(position);
                     id = musiccursor.getString(music_column_index);
                     music_column_index = musiccursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE);
                     musiccursor.moveToPosition(position);
                     id += " Size(KB):" + musiccursor.getString(music_column_index);
                     tv.setText(id);
               } else
                     tv = (TextView) convertView;
               return tv;
         }

}

}

Upvotes: 0

Views: 1138

Answers (1)

Adeel Shahzad
Adeel Shahzad

Reputation: 188

First thing. Don't use managedQuery(....) as it is deprecated. Use getContentResolver().query(....) which take same parameters as managedQuery(...)

Second thing, you need to add WHERE CLAUSE in your getContentResolver().query(.....).

This will be your WHERE CLAUSE:

String path = Environment.getExternalStorageDirectory().getPath();

    String selection = MediaStore.Audio.Media.IS_MUSIC + " !=" + 0
            + " AND " + MediaStore.Audio.Media.DATA + " LIKE '" + path
            + "/YourFolderNameHere/%'";

Just replace YourFolderNameHere with the name of the folder in SD card from which you want to scan the audio.

So your final code will be:

private void init_phone_music_grid() {
        System.gc();
        String path = Environment.getExternalStorageDirectory().getPath();

        String selection = MediaStore.Audio.Media.IS_MUSIC + " !=" + 0
                + " AND " + MediaStore.Audio.Media.DATA + " LIKE '" + path
                + "/YourFolderNameHere/%'";
        String[] proj = { MediaStore.Audio.Media._ID,
                MediaStore.Audio.Media.DATA,
                MediaStore.Audio.Media.DISPLAY_NAME,
                MediaStore.Audio.Media.SIZE };
        musiccursor = this.getContentResolver().query(
                MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, proj, selection,
                null, null);
        count = musiccursor.getCount();
        musiclist = (ListView) findViewById(R.id.listView1);
        musiclist.setAdapter(new MusicAdapter(getApplicationContext()));

        musiclist.setOnItemClickListener(musicgridlistener);
        mMediaPlayer = new MediaPlayer();
    }

Upvotes: 4

Related Questions