Как реализовать выбор аудиофайла с получением его Uri в android

Рейтинг: -1Ответов: 1Опубликовано: 30.04.2023

Я хочу реализовать простой выбор файла с получением его uri Но когда я искал один в Интернете, они показали метод с startActivityforResult, где они получили uri, но теперь это устаревший метод.

Я пробовал вот это

        val choose = Intent()
            .setType("Audio/*")
            .setAction(Intent.ACTION_GET_CONTENT)

        val resultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
            if (result.resultCode == Activity.RESULT_OK) {
                val intent: Intent? = result.data
                val file = contentResolver.openInputStream(intent?.data!!)
                if (file != null) {
                    val content = file.bufferedReader().readText()
                    Toast
                        .makeText(this, "File %s, Length %d bytes".format(intent.data!!.path, content.length), Toast.LENGTH_LONG)
                        .show()
                }
            }
        }

        resultLauncher.launch(choose)

Но в нем я не совсем понял, откуда я беру Uri

Ответы

▲ 0Принят

Для ACTION_GET_CONTENT есть готовый контракт ActivityResultContracts.GetContent, возвращающий Uri выбранного контента или null если выбор отменён

val choose = "audio/*"

val resultLauncher = registerForActivityResult(ActivityResultContracts.GetContent()) { uri: Uri? ->
    uri?.let { /* use uri */ }
}

resultLauncher.launch(choose)