2010-12-06 5 views
1

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

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

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

Ищите лучшие и надежные идеи. Благодарю.

ответ

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.

2

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

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

+0

Да, когда я делаю это в первый раз, я сканирую его с помощью AsyncTask, но позже, когда будет получено намерение, я сделаю это, используя сервис. – 2010-12-06 18:02:59

+1

Почему бы вам не воспользоваться услугой в первый раз? – 2010-12-06 18:24:19