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