我正在尝试制作自定义媒体播放器。目前我正在通过手机检索所有歌曲:
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 );
唯一的问题是我不知道热得到歌曲的PATH所以我可以把它添加到
player.reset();
player.setDataSource(songPath);
player.prepare();
player.start();
我怎样才能获得每首歌曲的歌曲路径并将其保存在一个字段中(R.id.song_tf_path)......或者有没有其他选择我可以做得更好?最好不必手动扫描所有文件夹中的音乐等
答案 0 :(得分:2)
看起来您可以将DISPLAY_NAME
替换为DATA
,它应该可以正常运行。请记住,这是一条绝对的道路,可能会有相当长的路径。
由于您正在使用setListAdapter()
,我将假设您正在使用列表活动。在这种情况下,请在类中添加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中,你可以用它做任何你喜欢的事情。