Я создаю приложение для музыкального проигрывателя, используя 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
Kotlin MediaStore, как я могу создать аудиофайл в той же папке, что и другой отсканированный аудиофайл? ⇐ Android
Форум для тех, кто программирует под Android
1745211405
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]
Подробнее здесь: [url]https://stackoverflow.com/questions/79581250/kotlin-mediastore-how-can-i-create-an-audio-file-in-same-folder-as-another-scan[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия