android - 如何在我的 ListView 中从 SD 卡上的特殊文件夹加载歌曲并播放?

标签 android media-player android-contentresolver

我想从我在 SD 卡上制作的自定义文件夹中加载歌曲并通过我的应用程序播放。

这个文件夹的路径在:/sdcard/Music/MyFolder

enter image description here

现在我有一个代码可以加载位于 sc 卡上的所有音乐。此代码正在运行。 但是我不想要 SD 卡中的所有音乐,我只想要我的文件夹 MyFolder 中的歌曲

这是我现在的代码:

private String[] getAudioList() {
        final Cursor mCursor = getContentResolver().query(
                MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                new String[] { MediaStore.Audio.Media.DISPLAY_NAME, MediaStore.Audio.Media.DATA }, null, null,
                "LOWER(" + MediaStore.Audio.Media.TITLE + ") ASC");

        int count = mCursor.getCount();

        String[] songs = new String[count];
        mAudioPath = new String[count];
        int i = 0;
        if (mCursor.moveToFirst()) {
            do {
                songs[i] = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME));
                mAudioPath[i] = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
                i++;
            } while (mCursor.moveToNext());
        }   

        mCursor.close();

        return songs;
    }

    private void playSong(String path) throws IllegalArgumentException,
    IllegalStateException, IOException {

    mMediaPlayer.reset();
    mMediaPlayer.setDataSource(path); 
    mMediaPlayer.prepare();
    mMediaPlayer.start();
}

mListView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
        long arg3) {
        try {
            playSong(mAudioPath[arg2]);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        }
       });
    }

有人知道怎么做吗?

最佳答案

在选择中使用 where 条件,像这样。

final Cursor mCursor = getContentResolver()
    .query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, new String[] { MediaStore.Audio.Media.DISPLAY_NAME, MediaStore.Audio.Media.DATA }, MediaStore.Audio.Media.DATA
        + " LIKE '/storage/sdcard0/Music/MyFolder/%'", null, "LOWER("
        + MediaStore.Audio.Media.TITLE + ") ASC");

关于android - 如何在我的 ListView 中从 SD 卡上的特殊文件夹加载歌曲并播放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24054774/

相关文章:

android - Google Places API 仅返回 5 个结果

android - RecyclerView OnClickListener(在整个房车上)

java - 如何将 ArrayList<User> 转换为 ArrayList<String>?

android - 使用 contentResolver 删除短信太慢

java - runinuithread找不到textview

JavaFX 媒体播放器 : MP4 Won't Loop on Windows 7

java - 无法使用 JavaFX MediaPlayer 播放视频

android - 从 ContentResolver.query() 获取 URI

java - Android 应用程序 Mp3 文件 mimetype 解析为 null

android - 如何在插入耳机时降低 MediaPlayer 的音量?