Есть два требования
- связать некоторые звуковые свойства, например. громкость или темп для каждого аудиофайла на Android
- эффективно запрашивать аудиоэлементы, используя эти свойства, например. получить топ самых громких треков
Я запрашиваю MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
через ContentResolver
, чтобы получить аудио элементы и проанализировать их свойства.
Проблема заключается в том, как связать эти свойства с элементами аудио — нет дополнительных MediaStore
столбцов таблицы для хранения пользовательских данных.
Текущее решение состоит в том, чтобы создать внутреннюю базу данных, хранить там свойства звука и использовать MediaStore.Audio.Media._ID
в качестве ключа к аудио элементам.
Поэтому, чтобы попасть в топ самых громких треков, мне нужно
- запрашивать внутреннюю базу данных и получать идентификаторы элементов
- запросить
ContentResolver
с помощью предложенияWHERE _ID IN (...)
и получить аудио элементы
Это может вызвать проблемы с производительностью в общем случае (длинный список идентификаторов). Более того, все усложняется, когда я хочу синхронизировать внутреннюю базу данных с поставщиком контента, например. удалить записи свойств для ранее удаленных аудиоэлементов. В контент-провайдере нет информации об удаленных элементах, поэтому мне нужно сравнить все идентификаторы из двух источников.
Итак, мои опасения:
- Там нет дополнительных
MediaStore
столбцов таблицы для хранения пользовательских данных, верно? Сравните сContactsContract.Data
. - Есть проблемы с запросом и синхронизацией внутренней базы данных с контент-провайдером. Есть ли способы их уменьшить?
Возможные решения: