用以下方法找不到sd卡中的音乐文件,请帮我看看这段获取音乐文件的代码吧,看看有什么问题。谢谢了

qwkeven 2010-11-14 12:51:05
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的形式,如果有什么其他方法能实现同样的效果的话也可以。
...全文
516 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
会耍小性子 2012-11-02
  • 打赏
  • 举报
回复
这个完整的代码还有吗?
ameyume 2010-11-14
  • 打赏
  • 举报
回复
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();
}
qwkeven 2010-11-14
  • 打赏
  • 举报
回复
这是我修改后的代码:
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;
}
qwkeven 2010-11-14
  • 打赏
  • 举报
回复
我按照楼上的说法修改之后,查出来的是列名,不是列的内容,我应该怎样处理?
qwkeven 2010-11-14
  • 打赏
  • 举报
回复
感谢楼上的提醒,我下面把改后的正确获取列表并且装入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;
}
}
ameyume 2010-11-14
  • 打赏
  • 举报
回复
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也是必须的

80,352

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧