Есть ли способ связать элементы MediaStore.Audio с дополнительными данными?

Есть два требования

  • связать некоторые звуковые свойства, например. громкость или темп для каждого аудиофайла на Android
  • эффективно запрашивать аудиоэлементы, используя эти свойства, например. получить топ самых громких треков

Я запрашиваю MediaStore.Audio.Media.EXTERNAL_CONTENT_URI через ContentResolver, чтобы получить аудио элементы и проанализировать их свойства.

Проблема заключается в том, как связать эти свойства с элементами аудио — нет дополнительных MediaStore столбцов таблицы для хранения пользовательских данных.

Текущее решение состоит в том, чтобы создать внутреннюю базу данных, хранить там свойства звука и использовать MediaStore.Audio.Media._ID в качестве ключа к аудио элементам.

Поэтому, чтобы попасть в топ самых громких треков, мне нужно

  • запрашивать внутреннюю базу данных и получать идентификаторы элементов
  • запросить ContentResolver с помощью предложения WHERE _ID IN (...) и получить аудио элементы

Это может вызвать проблемы с производительностью в общем случае (длинный список идентификаторов). Более того, все усложняется, когда я хочу синхронизировать внутреннюю базу данных с поставщиком контента, например. удалить записи свойств для ранее удаленных аудиоэлементов. В контент-провайдере нет информации об удаленных элементах, поэтому мне нужно сравнить все идентификаторы из двух источников.

Итак, мои опасения:

  1. Там нет дополнительных MediaStore столбцов таблицы для хранения пользовательских данных, верно? Сравните с ContactsContract.Data.
  2. Есть проблемы с запросом и синхронизацией внутренней базы данных с контент-провайдером. Есть ли способы их уменьшить?

Возможные решения:


person vokilam    schedule 11.06.2014    source источник