Как воспроизвести файл Mp3, используя его путь, используя Kotlin? - PullRequest
0 голосов
/ 25 апреля 2020

Я запустил проект для создания музыкального c плеера. Изначально я перечислил все mp3-файлы, используя уровень ApI 29. Но я сталкиваюсь с проблемой при создании медиаплеера. Каждый раз, когда отображается сообщение об ошибке: «Обнаружен нулевой Uri» ".... я пробовал это ... весело getAppExternalFilesDir (): File? {return if (Build.VERSION.SDK_INT> = 29) {getExternalFilesDir (null)} else {// @ Удалено в API 29. // / storage / emulated / 0 Environment.getExternalStorageDirectory ()}}

fun ListDir(f: File) {
    var files: Array<File>? = f.listFiles()
    list.clear()
    if (files != null) {
        for (file: File in files) {
            if (file.name.endsWith(".mp3")){
                list.add(Model(file.name))
            }


        }
    }
    listview.setOnItemClickListener { parent:AdapterView<*>, view:View, position:Int, id:Long ->
        if (position>=0) {
            var textcopy: TextView = view.findViewById(R.id.foldername)
            var namecopied: String = textcopy.text.toString()
            mediaplayer = MediaPlayer()
            var uri: Uri = Uri.parse((getAppExternalFilesDir().toString() + "/" + namecopied))
            Toast.makeText(this, uri.toString(), Toast.LENGTH_SHORT).show()
            mediaplayer = MediaPlayer.create(this, uri)
            mediaplayer.prepare()
            mediaplayer.start()
        }
          //where  getAppExternalFilesDir() =getExternalFilesDir(null)






    }

1 Ответ

1 голос
/ 25 апреля 2020

Ваш код также не оптимизирован, вы можете использовать холодные последовательности для поиска по файлам, он уничтожит старые экземпляры файла при запуске

fun ListDir(f: File) {
    val mp3Files = f.walk().map { it.absolutePath }.filter { it.endsWith(".mp3") }.toList()

    listview.setOnItemClickListener { parent:AdapterView<*>, view:View, position:Int, id:Long ->
        if (position>=0) {
            ...
            var uri: Uri = Uri.fromFile(File(mp3Files[position]))
            ...
        }
    }
}

Это создаст правильный Uri, который вы можете передать в медиаплеер для воспроизведения файлов mp3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...