Наконец, потребовалось время, но я понял это.
Во-первых, вам нужно получить доступ к файлу. Здесь вы можете прочитать о это
Затем я обнаружил, что для обновления полей заголовка или исполнителя (возможно, других, я их не тестировал) вам нужно установить значение столбца MediaStore.Audio.Media.IS_PENDING
равным 1. Вот так:
val id = //Your audio file id
val values = ContentValues()
values.put(MediaStore.Audio.Media.IS_PENDING, 1)
val uri = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id)
contentResolver.update(uri, values, null, null)
А затем вы можете редактировать поля, которые вам нужны. Также, чтобы завершить процесс обновления, снова установите MediaStore.Audio.Media.IS_PENDING
в 0:
val id = //Your audio file id
val title = //New title
val artist = //New artist
val values = ContentValues()
values.put(MediaStore.Audio.Media.IS_PENDING, 0)
values.put(MediaStore.Audio.Media.TITLE, title)
values.put(MediaStore.Audio.Media.ARTIST, artist)
val uri = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id)
contentResolver.update(uri, values, null, null)
Итак, в одной функции это будет выглядеть так:
@RequiresApi(value = android.os.Build.VERSION_CODES.Q)
fun updateMetadata(contentResolver: ContentResolver, id: Long, title: String, artist: String) {
val uri = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id)
val values = ContentValues()
values.put(MediaStore.Audio.Media.IS_PENDING, 1)
contentResolver.update(uri, values, null, null)
values.clear()
values.put(MediaStore.Audio.Media.IS_PENDING, 0)
values.put(MediaStore.Audio.Media.TITLE, title)
values.put(MediaStore.Audio.Media.ARTIST, artist)
contentResolver.update(uri, values, null, null)
}
Он написан на Kotlin, но я думаю, вы поймете, как это сделать на java.
UPD
Обновляя MediaStore
, вы не обновляете настоящий файл ни в одной версии Android. Это означает, что если файл будет обновлен (например, переименован) и / или отсканирован MediaScannerConnection
, ваши изменения будут потеряны. Этот ответ правильный.
person
KingEnderBrine
schedule
10.02.2020