android - 查找Audio.Media项的路径

标签 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 );

唯一的问题是我不知道如何获取歌曲的路径,因此可以将其添加到
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/

相关文章:

java - 计算麦克风音量(试图找到最大值)

java - 使用java播放wav文件

android - 实现安卓音乐搜索

android Mediaplayer 无法在模拟器中工作

android - cordova 插件 rm cordova-plugin-whitelist 不会更改 config.xml 因此它将在构建时重新添加

c# - 如何在C#中计算波信号的混响时间

java - Android:FastScrolling SectionIndexer getSections() 只被调用一次

java - android studio 媒体播放器 null 对象引用

android - TextView 占用额外空间

javascript - Easeljs - 触摸事件在平板电脑和 Android 中不起作用 - 但为什么