MediaStore.Audio.Media.DATA пуст для файлов на USB-накопителе - PullRequest
0 голосов
/ 28 марта 2012

Я ищу музыкальные файлы через

proj = new String[] {[...],
                    MediaStore.Audio.Media.DATA
                    };
Cursor musiccursor = context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,proj, MediaStore.Audio.Media.IS_MUSIC + "=1", null, null);

[...]

int ixdata      = musiccursor.getColumnIndex(MediaStore.Audio.Media.DATA);

[...]

while(musiccursor.moveToNext()) {
  [...]
  String data     = musiccursor.getString(ixdata);

с файлами в / mnt / sdcard все работает просто отлично, но, к сожалению, с файлами в / mnt / USB данные кажутся пустыми.

Что еще хуже, медиаплеер работает с content-URI файлов в / mnt / sdcard (т. Е. Content: // media / external / audio / media / 120), но не с content-URI файлов в / mnt / USB (т. е. контент: // media / external / audio / media / 530).

С файлами все в порядке, я могу их нормально воспроизвести, когда укажу медиаплееру абсолютный путь к т. Е. /Mnt/USB/testfile.mp3

Еще страннее: из файлов на USB-накопителе без проблем читаются альбом, исполнитель, заголовок и т. Д.

У кого-нибудь есть идея?

Спасибо

1 Ответ

0 голосов
/ 13 июля 2012

Я задавал себе тот же вопрос, но мне не удалось найти причину, по которой в медиасреде есть строки с пустыми данными.Что я придумал, так это добавление «предложения where» в запросе к хранилищу данных, не выбрав элементы с пустым полем данных (фильтрация пустого источника данных).

Cursor cursor = managedQuery(
  MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
  MY_COLUMNS, 
  MediaStore.Audio.Media.DATA + "<> ''",
  null,
  SORT_ORDER);

, где

  • MY_COLUMNS - это строка [], содержащая имена моих столбцов
  • SORT_ORDER - это опция порядка сортировки
...