如何让用户与任意应用程序共享文件?



我想从我的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类型也应该根据文件更新。

相关内容

  • 没有找到相关文章

最新更新