找到Audio.Media项的路径

时间:2011-07-17 14:12:22

标签: android audio media-player

我正在尝试制作自定义媒体播放器。目前我正在通过手机检索所有歌曲:

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)......或者有没有其他选择我可以做得更好?最好不必手动扫描所有文件夹中的音乐等

1 个答案:

答案 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中,你可以用它做任何你喜欢的事情。