我正在尝试做一个自定义媒体播放器。目前,我正在通过以下方式检索手机中的所有歌曲:
audioCursor = this.managedQuery(Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, Audio.Media.TITLE+" ASC");
startManagingCursor(audioCursor);
String[] columnsToMap = new String[] {
Audio.Media.TITLE,
Audio.Media.ARTIST,
Audio.Media.DISPLAY_NAME
};
int[] mapTo = new int[] {
R.id.song_tf_1,
R.id.song_tf_2,
R.id.song_tf_path
};
ListAdapter mAdapter = new SimpleCursorAdapter(
this,
R.layout.song_list_song,
audioCursor,
columnsToMap,
mapTo
);
setListAdapter( mAdapter );
唯一的问题是我不知道如何获取歌曲的路径,因此可以将其添加到
player.reset();
player.setDataSource(songPath);
player.prepare();
player.start();
如何获取每首歌曲的歌曲路径并将其保存在字段中(R.id.song_tf_path)...或者有没有其他选择可以使我做得更好?最好不必手动扫描所有文件夹中的音乐等
最佳答案
看起来您可以将DISPLAY_NAME
替换为DATA
,它应该可以正常工作。但是请记住,这是一条绝对路径,并且可能会相当长。
由于您使用的是setListAdapter()
,因此我假设您使用的是列表 Activity 。在这种情况下,请在您的类中添加onListItemClick()
方法,以在收到点击时执行操作。该方法应该给您一个id
,以便您知道单击了哪个项目。
这样的事情会起作用
protected void onListItemClick (ListView l, View v, int position, long id) {
String[] projection = new String[] {Audio.Media._ID, Audio.Media.DATA};
Cursor c = managedQuery(ContentUris.withAppendedId(Audio.Media.EXTERNAL_CONTENT_URI, id),
projection,
null,
null,
null);
c.moveToFirst();
String p = c.getString(c.getColumnIndex(Audio.Media.DATA));
//your code to load this path into your media player
//and play it goes here
}
歌曲的路径将存储在p中,您可以使用它进行任何操作。
关于android - 查找Audio.Media项的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6724389/