проблема с управляемым запросом - PullRequest
1 голос
/ 12 апреля 2011

Я пытаюсь написать приложение, в котором перечислены все mp3-файлы с SD-карты.

String[] columns = new String[] {
            MediaStore.Audio.Media._ID,
            MediaStore.Audio.Media.TITLE,
            MediaStore.Audio.Media.TITLE_KEY,
            MediaStore.Audio.Media.DATA,
            MediaStore.Audio.Media.ALBUM,
            MediaStore.Audio.Media.ARTIST,
            MediaStore.Audio.Media.ARTIST_ID,
            MediaStore.Audio.Media.DURATION,
            MediaStore.Audio.Media.TRACK
    };

    String uristr_t = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI.getPath();
    Cursor musicCursor = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                columns, null, null, null);

    if(musicCursor != null){
        mSongs = new ArrayList<SongInfo>( musicCursor.getCount());
        boolean isMediaFilesExist = musicCursor.moveToFirst();
                ...

На SD-карте есть несколько mp3-файлов, но musicCursor.GetCount () возвращает 0. Я полагаю, что путь неверный. EXTERNAL_CONTENT_URI равен content://media/external/audio/media, а его путь:

/external/audio/media

но путь моей SD-карты:

 /mnt/sdcard

И я попытался установить Uri вручную:

String uriStr = "content://" + Environment.getExternalStorageDirectory().getPath();
Uri sdCardUri = Uri.parse(uriStr);
Cursor musicCursor = managedQuery(sdCardUri, columns, null, null, null);

В этом случае Uri равен content:///mnt/sdcard, но musicCursor имеет значение null после managedQuery. Может быть, формат uriStr неверен, а инициализация Uri неверна? Спасибо!

1 Ответ

3 голосов
/ 12 апреля 2011

Ваш код правильный. Путь / external / audio / media - это путь поставщика контента, а не путь в реальной файловой системе. Вы уверены, что у вас есть MP3-файлы на карте? Проверьте в музыкальном приложении вы можете увидеть файлы. Если вы не можете туда войти, я иногда обнаруживаю (особенно в эмуляторе), что индексация не всегда выполняется. Принудительно переиндексировать все носители на SD-карте, отсоединив SD-карту и заново подключив (Настройки / SD-карта и память телефона / Отключение SD-карты).

...