查看特定文件夹中的音频

时间:2013-12-21 23:11:36

标签: android audio media

我想查看sd卡中特定文件夹的声音。文件夹名为“Audiorecorder”。我可以在SD卡中查看所有录像机。但我想只查看我的文件夹的音频。我用过这个代码。请帮帮我。

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;
         }

}

}

1 个答案:

答案 0 :(得分:3)

第一件事。不要使用managedQuery(....),因为它已被弃用。 使用与getContentResolver().query(....)

相同参数的managedQuery(...)

第二,您需要在WHERE CLAUSE中添加getContentResolver().query(.....)

这将是您的WHERE CLAUSE

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

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

只需将YourFolderNameHere替换为您要扫描音频的SD卡中的文件夹名称。

所以你的最终代码将是:

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();
    }