Kotlin MediaStore, как я могу создать аудиофайл в той же папке, что и другой отсканированный аудиофайл?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Kotlin MediaStore, как я могу создать аудиофайл в той же папке, что и другой отсканированный аудиофайл?

Сообщение Anonymous »

Я создаю приложение для музыкального проигрывателя, используя Android Studio в Kotlin. Я использую MediaStore, чтобы найти аудиофайлы из mediastore.adio.media.external_content_uri . Я хочу обрезать и сохранить обрезанную версию песни в том же каталоге, что и старая песня, поэтому я могу открыть ее, используя MediaStore. и работает отлично?). Затем я увидел, что его необходимо сохранить с помощью mediastore insert () , но он не может добавить ко всем папкам внутри mediastore.adio.media.external_content_uri из -за хранения Когда я работал с переименованием или удалением уже существующих песен, у меня не было проблем с использованием mediastore.createwRiteRequest (ContentResolver, URI) для получения доступа, но я не знаю, как получить URI для файла, который еще не создан (я предполагаю его невозможно?). Вот текущий код: < /p>
private fun trimAudio() {
try {
path?.let {
val tempPath = File(context.cacheDir, "temp.${extension(it)}")
val mediaItem = MediaItem.Builder()
.setUri(uri)
.setClippingConfiguration(
ClippingConfiguration.Builder()
.setStartPositionMs(start)
.setEndPositionMs(end)
.build()
)
.build()
val transformer = Transformer.Builder(context)
.addListener(object : Transformer.Listener {
override fun onCompleted(composition: Composition, result: ExportResult) {
Log.d("Trim", "Successful temporary")
registerSong(tempPath)
}

override fun onError(
composition: Composition,
result: ExportResult,
exception: ExportException
) {
Log.d("Trim", exception.message.toString())
}
})
.build()
transformer.start(mediaItem, tempPath.absolutePath)
}
} catch (e: Exception) {
Log.d("Trim", "Error")
}
}

private fun registerSong(tempPath: File) {
song.mediaMetadata.extras?.let {
val values = ContentValues().apply {
put(MediaStore.Audio.Media.IS_PENDING, 1)
put(MediaStore.Audio.Media.DISPLAY_NAME, uniqueName(path))
put(MediaStore.Audio.Media.MIME_TYPE, song.mediaMetadata.extras?.getString("mime_type"))
put(MediaStore.Audio.Media.RELATIVE_PATH, it.getString("relative_path"))
}
val resolver = context.contentResolver
val uri = resolver.insert(
MediaStore.Audio.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY),
values
)
// uri?.let {
// resolver.openOutputStream(uri).use { out ->
// val inputStream = tempPath.inputStream()
// inputStream.copyTo(out!!)
// }
// values.clear()
// values.put(MediaStore.Audio.Media.IS_PENDING, 0)
// resolver.update(uri, values, null, null)
// Log.d("Trim", "Successfully registered song!")
// }
}
}
< /code>
Вот ошибка: < /p>
java.lang.IllegalArgumentException:
Primary directory Download not allowed for content://media/external_primary/audio/media;
Allowed directories are: [Alarms, Audiobooks, Music, Notifications, Podcasts, Recordings, Ringtones]


Подробнее здесь: https://stackoverflow.com/questions/795 ... other-scan
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»