Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android应用程序中共享csv文件?_Android_Kotlin - Fatal编程技术网

如何在android应用程序中共享csv文件?

如何在android应用程序中共享csv文件?,android,kotlin,Android,Kotlin,我有一个文件,我想把它放在一个发送意图中,这样用户就可以通过电子邮件发送该文件,将其保存到Google Drive等。当我共享它时,共享表确实会正确显示。但是如果我选择Google Drive,文件就不会保存,尝试将其附加到Gmail会在toast消息中出现以下错误: Couldn't attach file. 有关守则: override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) {

我有一个文件,我想把它放在一个发送意图中,这样用户就可以通过电子邮件发送该文件,将其保存到Google Drive等。当我共享它时,共享表确实会正确显示。但是如果我选择Google Drive,文件就不会保存,尝试将其附加到Gmail会在toast消息中出现以下错误:

Couldn't attach file.
有关守则:

    override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) {
        R.id.summaryExportBtn -> {
            try {
                val filename = "summary.csv"
                val summaryFile = File(cacheDir, filename)

                val fos = FileOutputStream(summaryFile)
                fos.write(getSummaryCsvString().toByteArray())
                fos.close()

                val summaryUri = getUriForFile(this, BuildConfig.APPLICATION_ID + ".provider", summaryFile)

                val sendIntent = Intent()
                sendIntent.action = Intent.ACTION_SEND
                sendIntent.putExtra(Intent.EXTRA_STREAM, summaryUri)
                sendIntent.type = "text/csv"
                sendIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                sendIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
                sendIntent.data = summaryUri
                startActivity(Intent.createChooser(sendIntent, "SHARE"))
            } catch (e: Exception) {
                Log.d(FDSLogTag, "Writing csv summary failed: $e")
                val toast = Toast.makeText(this.applicationContext, "Writing csv summary failed: $e", Toast.LENGTH_LONG)
                toast.show()
            }

            true
        }

        else -> {
            super.onOptionsItemSelected(item)
        }
    }

如何成功共享该文件?

首先,确保您的AndroidManifest.xml的
部分中有一个文件提供程序:


然后,在app>res>xml文件夹中创建provider_path.xml文件:


现在,您可以创建一个文件,对其进行写入,并按照共享目的进行共享:

覆盖选项ItemSelected(item:MenuItem)=何时(item.itemId){
R.id.summaryExportBtn->{
试一试{
val filename=“myfilename.csv”
val myPath=File(filesDir,“myPath”)
如果(!myPath.exists()){
myPath.mkdir()
}
val myFile=File(myPath,文件名)
//把文件写在这里。
FileOutputStream(myFile)。使用{stream->
stream.write(myCsvString.toByteArray())
}
//这里,com.example.myapp.fileprovider应该与清单中的文件提供程序匹配
val contentUri=getUriForFile(this.applicationContext,“com.example.myapp.fileprovider”,myFile)
val intent=intent(intent.ACTION\u发送)
intent.flags=intent.FLAG\授予\读取\ URI\权限
intent.setDataAndType(
孔图里,
“文本/csv”)
intent.putExtra(intent.EXTRA_流,contentUri);
星触觉(意图)
}捕获(e:例外){
Log.d(FDSLogTag,“写入csv失败:$e”)
val toast=toast.makeText(this.applicationContext,“写入csv失败:$e”,toast.LENGTH\u LONG)
吐司
}
真的
}
其他->{
super.onOptionsItemSelected(项目)
}
}