public List<Map<String, Object>> getPlaylist() {
musicCursor = this.getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
new String[] {MediaStore.Audio.AudioColumns.TITLE,
MediaStore.Audio.AudioColumns.ARTIST,
MediaStore.Audio.AudioColumns.DURATION},
null, null, null);
Map<String, Object> map = new HashMap<String, Object>();
while (musicCursor.requery()) {
while (musicCursor.moveToNext()) {
map.put("title", musicCursor.
getColumnName(musicCursor.getColumnIndex(MediaStore.Audio.AudioColumns.TITLE)));
map.put("artist", musicCursor.
getColumnName(musicCursor.getColumnIndex(MediaStore.Audio.AudioColumns.ARTIST)));
map.put("duration",musicCursor.
getColumnName(musicCursor.getColumnIndex(MediaStore.Audio.AudioColumns.DURATION)));
} playlist.add(map);
}
return playlist;
}因为我想用simpleAdapter来处理获取出来的文件信息,所以需要把信息转换成map的形式,如果有什么其他方法能实现同样的效果的话也可以。

解决方案 »

  1.   

    String[] mCursorCols = new String[] { MediaStore.Audio.Media._ID,
    MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.ALBUM,
    MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.DATA,
    MediaStore.Audio.Media.MIME_TYPE, MediaStore.Audio.Media.ALBUM_ID,
    MediaStore.Audio.Media.ARTIST_ID,
    MediaStore.Audio.Media.DISPLAY_NAME,
    MediaStore.Audio.Media.DURATION };
    我查询上面的列可以查询出来。
    楼主把MediaStore.Audio.AudioColumns.
    改为
    MediaStore.Audio.Media.
    试试。
    好像MediaStore.Audio.Media._ID也是必须的
      

  2.   

    这是我修改后的代码:
    public List<Map<String, Object>> getPlaylist() {
    String[] mCursorCols = new String[] { MediaStore.Audio.Media._ID,
                MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.ALBUM,
                MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.DATA,
                MediaStore.Audio.Media.MIME_TYPE, MediaStore.Audio.Media.ALBUM_ID,
                MediaStore.Audio.Media.ARTIST_ID,
                MediaStore.Audio.Media.DISPLAY_NAME,
                MediaStore.Audio.Media.DURATION };
    musicCursor = this.getContentResolver().query(
    MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
    mCursorCols,
    null, null, null);
    Map<String, Object> map = new HashMap<String, Object>();
    <!--以下是把取出的直用text view标签显示出来的测试代码:-->
    int llll=musicCursor.getCount();
    for(int o=0;o<llll;o++)
    {
    musicCursor.moveToNext();
    fortest=musicCursor.getColumnName(4);
    }
    <!--为止-->
    if(musicCursor.requery()) 
    {
    while (musicCursor.moveToNext()) {
    map.put("title", musicCursor.getColumnName(musicCursor.getColumnIndex(MediaStore.Audio.Media.TITLE)));
    map.put("artist", musicCursor.getColumnName(musicCursor.getColumnIndex(MediaStore.Audio.Media.ARTIST)));
    map.put("duration",musicCursor.getColumnName(musicCursor.getColumnIndex(MediaStore.Audio.Media.DURATION)));
    playlist.add(map);
    }
    }

    return playlist;
    }
      

  3.   

    musicCursor.getColumnName查询出来的可不就是列名嘛。
    查询列的内容:
    // 获取当前播放歌曲名
    public String getTitleByPosition(Cursor c, int position) {
    c.moveToPosition(position);
    int titleColumn = c.getColumnIndex(MediaStore.Audio.Media.TITLE);
    return c.getString(titleColumn).trim();
    }
      

  4.   

    感谢楼上的提醒,我下面把改后的正确获取列表并且装入simpleAdaper中的class贴在下边,希望对大家有些帮助。
    package org.practice;import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;import android.app.Activity;
    import android.content.Context;
    import android.database.Cursor;
    import android.provider.MediaStore;
    import android.widget.ListView;
    import android.widget.SimpleAdapter;
    import android.widget.TextView;public class Getplaylist { private List<Map<String, Object>> playlist = new ArrayList<Map<String, Object>>(); private Cursor musicCursor; public void toshowPlaylist(Activity context) {
    ListView lv = (ListView) context.findViewById(R.id.musiclv1);
    TextView fail = (TextView) context.findViewById(R.id.fail);
    playlist = getPlaylist(context);
    if (!playlist.isEmpty()) {
    SimpleAdapter musicAdapter = new SimpleAdapter(context, playlist,
    R.layout.musiclist, new String[] { "title", "artist",
    "duration" }, new int[] { R.id.title, R.id.artist,
    R.id.duration });
    lv.setAdapter(musicAdapter); fail.setText(Integer.valueOf(playlist.size()).toString());
    } else {
    fail.setText("no sound found");
    }
    } public List<Map<String, Object>> getPlaylist(Context context) {
    String[] mCursorCols = new String[] { MediaStore.Audio.Media._ID,
    MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.ALBUM,
    MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.DATA,
    MediaStore.Audio.Media.MIME_TYPE,
    MediaStore.Audio.Media.ALBUM_ID,
    MediaStore.Audio.Media.ARTIST_ID,
    MediaStore.Audio.Media.DISPLAY_NAME,
    MediaStore.Audio.Media.DURATION };
    musicCursor = context.getContentResolver().query(
    MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, mCursorCols, null,
    null, null); if (musicCursor.requery()) {
    while (musicCursor.moveToNext()) {
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("title", musicCursor.getString(
    musicCursor
    .getColumnIndex(MediaStore.Audio.Media.TITLE))
    .trim());
    map.put("artist", musicCursor.getString(
    musicCursor
    .getColumnIndex(MediaStore.Audio.Media.ARTIST))
    .trim());
    map
    .put(
    "duration",
    musicCursor
    .getString(
    musicCursor
    .getColumnIndex(MediaStore.Audio.Media.DURATION))
    .trim());
    playlist.add(map);
    }
    }
    return playlist;
    }
    }