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的形式,如果有什么其他方法能实现同样的效果的话也可以。
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的形式,如果有什么其他方法能实现同样的效果的话也可以。
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也是必须的
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;
}
查询列的内容:
// 获取当前播放歌曲名
public String getTitleByPosition(Cursor c, int position) {
c.moveToPosition(position);
int titleColumn = c.getColumnIndex(MediaStore.Audio.Media.TITLE);
return c.getString(titleColumn).trim();
}
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;
}
}