Отфильтровать управляемый запрос по расширению файла (или, альтернативно, типу файла) для курсора Android.

Я хочу выполнить управляемый запрос с использованием Android SDK, где возвращаемые результаты фильтруются по соответствующему расширению файла (например, не обязательно по имени). Я провел довольно много исследований, устал и надеюсь, что сообщество может мне помочь. Я уверен, что ответ есть, но вместо того, чтобы читать книгу по SQL или что-то в этом роде, я просто пытаюсь что-то сделать. это должно быть довольно просто, но не найти решение.

То, что я хочу сделать, это, по сути, что-то вроде:

managedQuery(Audio.Media.EXTERNAL_CONTENT_URI, myProjection, Audio.Media.DATA + " like ? ", new String[] {"%mp3%"}, null );

Это работает, ЗА ИСКЛЮЧЕНИЕМ того, что если заголовок похож на «mymp3.wav», этот запрос все равно вернет его, поскольку в имени есть «mp3», но это не то, что я хочу -> я хочу, чтобы он отфильтровывался исключительно на основе файла расширение (или, альтернативно, тип файла, если есть способ сделать это [например, если имя расширения файла mp3 было изменено на .wav, даже если содержимое файла на самом деле является mp3, это также будет работать для моих целей]) . В решении должен быть указан способ фильтрации нескольких расширений/типов файлов (например, если я хочу, чтобы запрос возвращал все файлы .mp3, а также файлы .wav, но не файлы .amr).

Кроме того, пока у меня есть вы, я хочу отсортировать результаты по алфавиту. Я пробовал что-то вроде:

managedQuery(Audio.Media.EXTERNAL_CONTENT_URI, myProjection, null, null, MediaStore.Audio.Media.TITLE + " ASC" );

Однако это не фильтрует все результаты... то есть возвращаемый список сортируется, скажем, по заголовку mp3, а затем, в конце, добавляется к списку. файлы .wav также отсортированы по алфавиту, но я хочу, чтобы весь список был в алфавитном порядке независимо от типа файла.

Я знаю, что кто-то здесь может легко ответить на этот вопрос -> заранее спасибо !!!


person fatfreddyscat    schedule 28.10.2011    source источник
comment
а если поставить. как {%.mp3%}?   -  person user370305    schedule 28.10.2011
comment
Я пробовал %.mp3% раньше, но что-то еще синтаксически должно было быть отключено, потому что это вызвало сбой, но теперь да, это работает... ОДНАКО, как заставить его работать для %.mp3% И % .wav% ??? (добавление другой строки в массив не работает; это вызывает сбой с сообщением: E/AndroidRuntime(9407): java.lang.RuntimeException: невозможно запустить активность... android.database.sqlite.SQLiteException: bind или индекс столбца вне допустимого диапазона: дескриптор 0x388060   -  person fatfreddyscat    schedule 28.10.2011
comment
Попробуйте это, manageQuery(Audio.Media.EXTERNAL_CONTENT_URI, myProjection, Audio.Media.DATA + like ? , new String[] {%.mp3,%.wav}, null ); и дайте мне знать, что происходит.   -  person user370305    schedule 28.10.2011
comment
нет, это не работает. Я получаю сообщение об ошибке, упомянутое в моем предыдущем комментарии... Но я люблю помощь!!! Было бы еще больше приятно, если бы мы могли заставить его работать ;)   -  person fatfreddyscat    schedule 28.10.2011
comment
попробуйте запрос, предложенный Куртисом Нусбаумом?   -  person user370305    schedule 28.10.2011
comment
его обновленный ответ сработал ... большое спасибо вам обоим !!   -  person fatfreddyscat    schedule 28.10.2011


Ответы (1)


Я думаю, все, что вам нужно сделать, это изменить %mp3% на %mp3. Это приведет к тому, что «mp3» будет в конце имени файла.

Если вам нужно выбрать несколько типов файлов, сделайте это следующим образом:

managedQuery(
  Audio.Media.EXTERNAL_CONTENT_URI,
  myProjection, 
  Audio.Media.DATA + " like ? OR " + Audio.Media.DATA + " like ? ", 
  new String[] {"%mp3","%wav"}, 
  MediaStore.Audio.Media.TITLE + " ASC" );
person Kurtis Nusbaum    schedule 28.10.2011
comment
хорошо. Я думаю, что это немного лучше, чем ставить %.mp3%, как обсуждалось в комментариях выше. Однако мне по-прежнему нужно иметь возможность иметь несколько selectionArgs (например, иметь возможность возвращать файлы .wav и .mp3) (и, желательно, все отсортированные). У тебя есть решение? - person fatfreddyscat; 28.10.2011
comment
Красиво сработало!! Спасибо за обновление вашего ответа! Я пытался Audio.Media.DATA + нравится? ИЛИ нравится? но безрезультатно; не подумал попробовать добавить туда второй «Audio.Media.DATA». БОЛЬШОЕ ТЕБЕ СПАСИБО!! (и спасибо пользователю user370305 за вашу помощь/усердие!) - person fatfreddyscat; 28.10.2011
comment
Да, это своего рода облом, вам нужно добавить Audio.Media.DATA дважды, но это просто синтаксис SQL для вас. - person Kurtis Nusbaum; 28.10.2011
comment
Хорошо, последний (клянусь) вопрос: как сделать так, чтобы порядок сортировки «MediaStore.Audio.Media.TITLE + ASC» сортировал результирующий список без учета регистра? Все мои вещи, которые начинаются со строчной буквы «а», находятся в нижней части вещей, которые начинаются с прописной буквы «Z»... ??? - person fatfreddyscat; 28.10.2011
comment
@fatfreddyscat, если у вас есть другой вопрос, пожалуйста, задайте его как еще один вопрос. Таким образом, другим людям, которые ищут что-то подобное в будущем, не нужно смотреть на наши комментарии взад-вперед... и поэтому я могу получить больше репутации ;) - person Kurtis Nusbaum; 28.10.2011
comment
к... выложил. Ответь на него, чтобы повысить свою репутацию :D - person fatfreddyscat; 29.10.2011