Android MediaStore получает отдельные папки с музыкальными файлами

Ищете способ получить только пути к папкам музыкальных файлов из Android MediaStore для введенного пути к каталогу. Так что на самом деле вопрос в том, как сделать правильный запрос к MediaStore.

Вот пример. Мой текущий код:

String dirPath="/mnt/sdcard/Music/";
    String selection =MediaStore.Audio.Media.DATA +" like ?";
    String[] projection = {MediaStore.Audio.Media.DATA};    
    String[] selectionArgs={dirPath+"%"};
    Cursor cursor = this.managedQuery(
        MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
        projection,
        selection,
        selectionArgs,
        null);
    List songs = new ArrayList();
    while(cursor.moveToNext())
        songs.add(cursor.getString(0));

В результате мы получим в списке songsчто-то вроде:

/mnt/sdcard/Music/song1.mp3
/mnt/sdcard/Music/song2.mp3
/mnt/sdcard/Music/FolderWithSongs/song3.mp3
/mnt/sdcard/Music/AnotherFolderWithSongs/song4.mp3
/mnt/sdcard/Music/AndOneMoreFolder/song5.mp3
/mnt/sdcard/Music/AndOneMoreFolder/song6.mp3
/mnt/sdcard/Music/AndOneMoreFolder/song7.mp3
/mnt/sdcard/Music/AndOneMoreFolder/SomeFolder/song8.mp3
/mnt/sdcard/Music/AndOneMoreFolder/SomeFolder/song9.mp3

Что я на самом деле ищу -, чтобы получить такой список DISTINCT из вложенных путей одного уровня -из dirPath, как этот:

/mnt/sdcard/Music/FolderWithSongs/ 
/mnt/sdcard/Music/AnotherFolderWithSongs/ 
/mnt/sdcard/Music/AndOneMoreFolder/

Если здесь будут файлы текущей папки-/mnt/sdcard/Music/song1.mp3и /mnt/sdcard/Music/song2.mp3— тоже приемлемо.

Любые идеи?

РЕДАКТИРОВАТЬ Я нашел два возможных решения: Android составляет список музыки по папкам и воспроизводит их и Построить древовидную структуру из списка строковых путей , но я думаю, что лучший способ решить эту проблему возможен.

5
задан Community 23 May 2017 в 10:30
поделиться