Отфильтруйте управляемый запрос по расширению файла (или, альтернативно, по типу файла) для курсора 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, также отсортированные по алфавиту. но я хочу, чтобы весь список был в алфавитном порядке, независимо от типа файла.

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

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" );
Другие вопросы по тегам