Я работаю над простым приложением, которое воспроизводит аудиофайлы, и я хотел бы иметь возможность открыть приложение из аудиофайла, например, в файловом браузере. Фильтр намерений и все, что установлено, но я борюсь с тем, как использовать то, что я получаю.
содержимое: // uri, который я получаю, похоже, не предназначено для использования в реальном файле - я посмотрел ответы на вопрос здесь: Android: получение URI файла из URI контента? , но подход, описанный там, чтобы получить файл, а не просто использовать inputStream (что, в сущности, мне и нужно), кажется неправильным, судя по обескураживающим комментариям, а также этому сайту: Как использовать контент с Uri . Или я ошибаюсь?
Прямо сейчас я вызываю этот метод в своей функции MainActivity для обработки моего намерения, которое в основном просто создает временную копию файла и передает ее туда, где он используется:
private fun handleIntent() {
val uri = intent.data
val inputStream = contentResolver.openInputStream(uri)
val outputFile = File(this.cacheDir, "output.wav")
val outputStream = FileOutputStream(outputFile)
inputStream.use { input ->
outputStream.use { output ->
input.copyTo(output)
}
}
DataRepository.handleFileFromIntent(outputFile)
showPlayerFragmentWithFreshSelection()
}
Это почти работает (как я получаю то, что передается приложению в виде файла), но неправильно. Так как я хочу добавить файл к выбору аудиофайлов, которые может пройти мой проигрыватель, и хотел бы иметь возможность сохранить этот выбор, сохранение временного файла или даже копии вообще, это неправильный подход (я просто назвал файл "output.wav" здесь, потому что я знал, что для своего теста я буду использовать файл .wav)
Существует ли какой-либо правильный и безопасный способ получить фактический путь к файлу из моего содержимого URI или это просто что-то, что нельзя (или не следует) делать вообще?
Я пишу это на Kotlin, но ответы с использованием Java также очень полезны!