我想从我的Android应用程序中共享一个文件。假设用户点击"分享…"按钮,它会打开一个对话框,让他们选择他们想要分享的应用程序。它可以是一个电子邮件应用程序(在这种情况下,我希望它作为附件),或者一个消息应用程序(消息作为附件发送给联系人),等等。
感觉文档中的共享文件部分是关于这个的,但不知何故我不知道如何使它工作。文档的重点是让另一个应用程序"选择";一个文件从我的应用程序,我只是想让我的应用程序"共享"一个带有任意应用程序的文件。
我试图在AndroidManifest.xml
:
<provider
android:authorities="com.test.fileprovider"
android:name="androidx.core.content.FileProvider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
我创建了xml/filepaths
文件:
<paths>
<files-path path="logs/" name="logs" />
</paths>
然后我在logFile
下面写我的文件:
val logDir = File(context.filesDir, "logs")
val logFile = File(logDir, "mylog.txt")
我试着"分享"用:
val fileToShare = FileProvider.getUriForFile(
context,
"com.test.fileprovider",
logFile
)
val sendIntent = Intent().apply {
action = Intent.ACTION_SEND
putExtra(Intent.EXTRA_STREAM, fileToShare)
type = "*/*"
}
context.startActivity(sendIntent)
但是,尽管它没有崩溃,什么也没发生。
我错过了什么?这是共享文件的正确方式吗?
文档的重点是有另一个应用程序"一个文件从我的应用程序,我只是想让我的应用程序"共享"一个带有任意应用程序的文件。
你需要这个文档。他们的页面标题(驱动导航)还有很多需要改进的地方。
我错过了什么?
尝试使用内容的实际MIME类型,而不是*/*
。
我缺少Intent.createChooser
,如@CommonsWare的链接所述。
如此:
val fileToShare = FileProvider.getUriForFile(
context,
"com.test.fileprovider",
logFile
)
val sendIntent = Intent().apply {
action = Intent.ACTION_SEND
putExtra(Intent.EXTRA_STREAM, fileToShare)
type = "*/*"
}
context.startActivity(Intent.createChooser(sendIntent, null))
MIME类型也应该根据文件更新。