Kotlin如何使用onclick按钮打开文件

xhv8bpkk  于 2022-12-23  发布在  Kotlin
关注(0)|答案(1)|浏览(102)

我想打开Kotlin的文件。
大多数代码使用startActivityForResult,但已弃用。
所以找到了这个one

// get reference to button
    val btn_csv_me = findViewById(R.id.btnCSV) as Button
    // set on-click listener
    btn_csv_me.setOnClickListener(object : View.OnClickListener {
      override fun onClick(view: View?) {
        val path = Environment.getExternalStorageDirectory().toString() + "/" + "Downloads" + "/"
        val uri: Uri = Uri.parse(path)
        val intent = Intent(Intent.ACTION_PICK)
        intent.setDataAndType(uri, "*/*")
        startActivity(intent)
      }
    })

Uri  = /storage/emulated/0/Downloads/

但是,它没有显示我打开文件夹。我只有两个选项:用照片或联系人打开。
我错过什么了吗?

编辑:

// get reference to button
    val btn_csv_me = findViewById(R.id.btnCSV) as Button
    // set on-click listener
    btn_csv_me.setOnClickListener(object : View.OnClickListener {
      override fun onClick(view: View?) {
        val path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString()
        val uri: Uri = Uri.parse(path)
        val intent = Intent(Intent.ACTION_VIEW)
        intent.setDataAndType(uri, "*/*")
        resultLauncher.launch(intent)   
      }

      private val resultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
        if (it.resultCode == Activity.RESULT_OK) {
          val uri: Uri? = it.data?.data
          // Use this Uri
        }
      }
    })

感谢Sohaib。现在它确实去了下载目录,但当我点击文件,它显示我不能显示。
我不想这样做,只是想得到的csv文件,并把它放到sqlite后。
请问我怎样才能知道这个文件的名字?

l7wslrjt

l7wslrjt1#

试试这个代码。

private fun onButtonClick() {
    val path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString()
    val uri: Uri = Uri.parse(path)
    val intent = Intent(Intent.ACTION_VIEW)
    intent.setDataAndType(uri, "*/*")
    resultLauncher.launch(intent)
}

弃用的startActivityForResult已替换为registerForActivityResult,如下所示:

private val resultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
    if (it.resultCode == Activity.RESULT_OK) {
        val uri: Uri? = it.data?.data
        // Use this Uri
    }
}

相关问题