Я пытаюсь запросить 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