Tuesday, April 26, 2011

Android: Как работать с mp3-файлами

В данной статье описан процесс получения всей основной информации о аудиотреках в устройстве с Android, основы работы с плейлистами и проигрывания аудиофайлов.
Общие принципы работы с провайдерами данных
Источники данных ( Content Providers, Провайдеры данных ) в Android предоставляют интерфейс общего доступа к любому источнику данных путем отделения уровня доступа к данным от уровня приложения. Источники данных предлагают стандартный API, с помощью которого приложения могут обмениваться своими данными между собой, и использовать различные системные базы данных.

Типичный запрос к провайдеру данных выглядит следующим образом. Сначала запрашивается системный объект класса ContentResolver, который позволяет подключаться к провайдерам данных. Затем необходимо настроить параметры запроса и вызвать метод ContentResolver.query, в который передаются параметры запроса и который в случае успешного выполнения возвращает объект класса Cursor, предоставляющий интерфейс для работы с данными, возвращаемые в результате запроса к базе данных.

String[] projection = new String[] {
People._ID,
People.NAME,
People.NUMBER,
};
Uri mContactsUri = People.CONTENT_URI;
ContentResolver resolver = appContext.getContentResolver();
Cursor managedCursor = resolver.query( mContactsUri,
          projection,.
          null, 
          null,
          People.NAME + " ASC"); 
for( int i=0;i<managedCursor.getCount();i++)
{
      managedCursor.moveToPosition(i);
      String nameOfContact =  managedCursor.getString(1);
      ….    
}

Подробнее о работе с провайдерами данных можно посмотреть на сайте разработчиков - http://developer.android.com/guide/topics/providers/content-providers.html.

Провайдер данных MediaStore.Audio

Провайдер данных MediaStore представляет собой централизованную базу данных мультимедиа, размещенных в памяти устройства или на сменном носителе ( SD карте ), включая аудио-, видеофайлы и изображения. Данные в MediaStore записываются автоматически при сканировании системой внутренней или сменной памяти, при этом рассылаются сообщения ACTION_MEDIA_SCANNER_STARTED и ACTION_MEDIA_SCANNER_FINISHED. Любая программа может уведомить сканер о наличии нового файла вызовом
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, newFilePath));
Примечание: чтобы запретить сканеру обрабатывать определенный каталог на диске, поместите туда пустой файл с именем .nomedia.
При сканировании анализируются ID теги и другая информация, которая становится доступна в пользовательских приложениях. Доступ к данным аудиофайлов осуществляется через провайдер MediaStore.Audio, который также дает возможность работать с плейлистами ( списками воспроизведения ). 
В примерах этой статьи будет использоваться вызов myquery, который утилизирует получение курсора по URI провайдера данных и других параметров запроса.

Read more: PlainCodeSource