Код: Выделить всё
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!")
// }
}
}
Java.lang.illegalargumentException: Загрузка первичного каталога не разрешена для контента: // media/external_primary/audio/media; Разрешенными каталогами являются [тревоги, аудиокниги, музыка, уведомления, подкасты, записи, рингтоны]
Подробнее здесь: https://stackoverflow.com/questions/795 ... other-scan