Android Q - Запрос MediaStore для аудиофайлов в указанной папке c и ее подпапках - PullRequest
0 голосов
/ 26 января 2020

Я пытаюсь запросить Android Q mediaStore с помощью contentResolver. Я хочу получить все аудиофайлы из папки speci c со всеми ее подкаталогами (например, /sdcard/Download/AudioFiles/Folder 1 и /sdcard/Download/AudioFiles/Folder 2/Folder 3). Разрешение android.permission.READ_EXTERNAL_STORAGE установлено в моем manifest.xml, а также используются разрешения времени выполнения.

Я сделал это в Android Studio Emulator, поэтому я использую download folder

Когда я выбираю папку Downloads в fileChooser, чтобы получить все аудиофайлы в подкаталогах, которые я получил нет результатов (Cursor.getCount() = 0). Когда я выбираю каталог /sdcard/Download/AudioFiles/Folder 2, я получаю ожидаемые результаты.

Такое поведение происходит от DocumentFile.getName(), который дает мне последнюю часть файловой системы. Выбор fileChosser Downloads дает мне download. Пожалуйста, не множественное число "s" отсутствует. Поэтому я не улавливаю результат.

Я получаю выбранное имя каталога, используя onActivityResult из

Intent intent = new vntent(Intent.ACTION_OPEN_DOCUMENT_TREE) 

, а затем

uri = data.getData();
Documentfile df = DocumentFile.getName();

Я получаю все аудиофайлы в папке, используя:

selection = MediaStore.Audio.Media.BUCKET_DISPLAY_NAME + " like ?";
String[] selectionArgs = new String[] {audiodir};

Когда я устанавливаю

selection = MediaStore.Audio.Media.RELATIVE_PATH + " like ?";
String[] selectionArgs = new String[] {audiodir};

, я не получаю прослушивания прослушивания.

Общий код:

Uri uri;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
uri = MediaStore.Audio.Media.getContentUri(MediaStore.VOLUME_EXTERNAL);
}
String directory = "audioFiles"
String audiodir = "%" + directory + "%";

projection = new String[]{
    MediaStore.Audio.Media._ID,
    MediaStore.Audio.Media.ALBUM,
    MediaStore.Audio.Media.ARTIST,
    MediaStore.Audio.Media.DURATION,
    MediaStore.Audio.Media.TITLE,
    MediaStore.Audio.Media.DISPLAY_NAME,
    MediaStore.Audio.Media.BUCKET_DISPLAY_NAME,
    MediaStore.Images.Media.RELATIVE_PATH,
    MediaStore.Audio.Media.TRACK,
    MediaStore.Audio.Media.YEAR,
};

Cursor cur;
String selection = MediaStore.Audio.Media.RELATIVE_PATH + " like ?";
String[] selectionArgs = new String[] {audiodir};
String sortOder = MediaStore.Audio.Media.TRACK + " ASC";
Cursor cur = getContentResolver().query(uri, projection, selection, selectionArgs, sortOder);

В Android Q mediaStore.audio.media.DATA ограничен, поэтому я использую mediaStore.audio.media.RELATIVE_PATH.

Как я могу решить эту проблему (обрезать множественное число "s" - плохой обходной путь).

Спасибо , FP

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...