Android находит файлы на SDCard

1

Я работаю над приложением MP3, в котором я хотел бы индексировать файлы на SDCard. Каков наилучший способ сделать это?

Моя идея. Поиск файлов, когда приложение запускается в первый раз, и зарегистрировать широковещательный приемник для изменения состояния SDCard и поиска файлов в любое время, когда намерение транслируется.

Но в этом случае ANR появится, если мой вещательный приемник не вернется в течение 10 секунд.

Ищем лучшие и безотказные идеи. Спасибо.

Теги:
file-search

2 ответа

2
Лучший ответ

Согласитесь с Крисом, MediaScanner находит музыку для вас, заполняя базу данных MediaStore. Вот какой код для поиска музыки:

        final Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
        final String[] cursor_cols = {
                MediaStore.Audio.Media._ID,
                MediaStore.Audio.Media.ARTIST,
                MediaStore.Audio.Media.ALBUM,
                MediaStore.Audio.Media.TITLE,
        };
        final String where = MediaStore.Audio.Media.IS_MUSIC + "=1";
        final Cursor cursor = getContentResolver().query(uri, cursor_cols, where, null, null);
        cursor.moveToNext();
        final String artist = cursor.getString(_cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));
        final String album = cursor.getString(_cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM));
        final String track = cursor.getString(_cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));
        doSomethingInteresting(artist, album, track);

В поле "данные" содержится дескриптор, который вы можете использовать с MediaPlayer.

  • 0
    отличный ответ. Благодарю.
2

Чтобы избежать ANR, вам необходимо выполнить поиск вне потока пользовательского интерфейса. Поскольку SD-карты могут быть большими, вы, вероятно, захотите сделать это в службе, а не в своей деятельности переднего плана, чтобы пользователь мог использовать свое устройство для других вещей, пока поиск продолжается.

Но андроид уже находит и индексирует поддерживаемые медиафайлы, поэтому вы должны увидеть, можете ли вы использовать встроенный материал MediaScanner.

  • 0
    Да, делая это в первый раз, я буду сканировать его с помощью AsyncTask, но позже, когда будет получено намерение, я сделаю это с помощью службы.
  • 1
    Почему бы вам не воспользоваться услугой в первый раз?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню