Android Kotlin-如何使用默认应用程序通过Intent打开csv文件?

Android Kotlin-如何使用默认应用程序通过Intent打开csv文件?,android,csv,kotlin,Android,Csv,Kotlin,我的android应用程序流程如下: 创建一个csv文件 将其存储在默认应用程序文件夹中 生成成功创建的通知 在默认应用程序中打开csv 到目前为止,我无法通过Intent或其他方法打开csv 使用以下代码,我可以打开资源管理器,但不能打开文件夹路径 var path = this.applicationContext.getExternalFilesDir(null)?.absolutePath.toString() println("Hey my path is $path&quo

我的android应用程序流程如下:

  • 创建一个csv文件
  • 将其存储在默认应用程序文件夹中
  • 生成成功创建的通知
  • 在默认应用程序中打开csv
  • 到目前为止,我无法通过Intent或其他方法打开csv


    使用以下代码,我可以打开资源管理器,但不能打开文件夹路径

    var path = this.applicationContext.getExternalFilesDir(null)?.absolutePath.toString()
    println("Hey my path is $path")
    val csvWriter = CSVWriter(
                    fileWriter,
                    CSVWriter.DEFAULT_SEPARATOR,
                    CSVWriter.NO_QUOTE_CHARACTER,
                    CSVWriter.DEFAULT_ESCAPE_CHARACTER,
                    CSVWriter.DEFAULT_LINE_END
                )
    csvWriter.writeAll(data.toMutableList())
    csvWriter.close()
    
    val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
                        addCategory(Intent.CATEGORY_OPENABLE)
                        type = "application/*"
                    }
    startActivityForResult(intent, 2)
    
    此外,我试图开发一个功能,但没有得到有效的响应:

    fun open_file(filename: String?) {
            val path = File(filesDir, "dl")
            val file = File(path, filename)
    
            // Get URI and MIME type of file
            val uri = FileProvider.getUriForFile(this, "$PACKAGE_NAME.fileprovider", file)
            val mime = contentResolver.getType(uri)
    
            // Open file with user selected app
            val intent = Intent()
            intent.action = Intent.ACTION_VIEW
            intent.setDataAndType(uri, mime)
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
            startActivity(intent)
        }
    
    我看到一些可能的解决方案是用java开发的,但在Kotlin中有一些已弃用和/或无法转换的解决方案

    编辑: 根据@commonware的建议,我正试图将文件保存在给定的路径中,但用户没有。但是,我得到了一个错误:没有找到处理意图的活动

    val FILE_EXPORT_REQUEST_CODE = 12
    val exportIntent = Intent(Intent.ACTION_CREATE_DOCUMENT)
    exportIntent.addCategory(Intent.CATEGORY_OPENABLE)
    exportIntent.type = "text/csv"
    val uri =  Uri.parse("$path/file.csv")
    exportIntent.data = uri
    val filename = "file.csv"
    exportIntent.putExtra(Intent.EXTRA_TITLE, filename)
    startActivityForResult(exportIntent, FILE_EXPORT_REQUEST_CODE)
    

    提前感谢。

    “使用以下代码,我可以打开资源管理器,但不能打开文件夹路径”--这在Android中不是真的,抱歉,至少如果您直接在文件系统上创建文件的话。“我试图发展一种功能,但没有有效的反应”——我们不知道你的具体症状是什么。假设清单和XML元数据设置正确,那么您在清单和XML元数据中的内容似乎很好。但是,用户不一定拥有支持该MIME类型的应用程序。因此,如果你得到了一个
    ActivityNotFoundException
    ,我一点也不奇怪。“如何使用默认应用程序通过Intent打开csv文件?”——请记住,有几十亿Android用户,分布在成千上万的设备型号上。预装应用程序的列表因型号而异。此外,用户可能在受限制的配置文件中运行,可能无法访问所有预安装的应用程序。即使对于像HTML这样常见的东西,也不要假设所有用户都可以访问某个活动来查看它。对于CSV之类的东西。。。欢迎您尝试为其启动应用程序,但用户很有可能没有应用程序。@Commonware感谢您的回答。路径是“/storage/emulated/0/Android/data/com.dafmedinama.myApp/files”。当我打开浏览器时,它会显示一般的android路径,但不是这个。是否可以在给定路径中打开文件资源管理器?我的目标是(以某种方式)向用户显示CSV文件的位置。“是否可以在给定路径中打开文件资源管理器?”--否。“我的目标是(以某种方式)向用户显示CSV文件的位置”--然后可能使用
    ACTION\u CREATE\u DOCUMENT
    ,并让用户选择将用户内容放在用户设备上的位置(或者可能在用户选择的云存储提供商中)。@Commonware我尝试过,但它创建了一个空文件或一个错误。请检查我的编辑“使用以下代码,我可以打开资源管理器,但不能打开文件夹路径”--这在Android中不是一件真正的事情,抱歉,至少如果您直接在文件系统上创建文件。“我试图开发一种功能,但没有得到有效的响应“--我们不知道您的具体症状是什么。假设您的清单和XML元数据设置正确,您的清单和XML元数据看起来很好。但是,用户不一定有支持该MIME类型的应用程序。因此,如果您收到
    ActivityNotFoundException
    ,我并不感到惊讶。“如何使用默认应用通过Intent打开csv文件?"--请记住,有几十亿Android用户,分布在数万种设备型号上。预装应用程序的列表因型号而异。此外,用户可能在受限的配置文件中运行,可能无法访问所有预装应用程序。即使是像HTML这样常见的应用程序,也不要假设所有用户都可以访问要查看它,请访问活动。对于CSV之类的内容,欢迎您尝试为其启动应用程序,但用户很可能没有应用程序。@Commonware感谢您的回答。路径为“/storage/emulated/0/Android/data/com.dafmedinama.myApp/files”。当我打开资源管理器时,它会显示一般的android路径,但不会显示此路径。是否可以在给定路径中打开文件资源管理器?我的目标是(以某种方式)向用户显示CSV文件的位置。“是否可以在给定路径中打开文件资源管理器?”--否。“我的目标是(以某种方式)向用户显示CSV文件的位置”--然后可能使用
    操作\u创建\u文档
    ,让用户选择将用户内容放在用户设备上的位置(或者可能放在用户选择的云存储提供商中)。@Commonware我尝试过,但它创建了一个空文件或一个错误。请检查我的编辑