我想共享我的Android应用程序中的文件.假设用户单击"共享…"按钮,它会打开一个对话框,让他们 Select 要与哪个应用程序共享.它可以是一个邮箱应用程序(在这种情况下,我希望它作为附件),或者是一个消息应用程序(消息作为附件发送给联系人),等等.

感觉文档中的Sharing a file个部分就是关于这一点的,但不知怎的,我不知道如何让它起作用.文档的重点是让另一个应用程序从我的应用程序中" Select "一个文件,我只想让我的应用程序与任意应用程序"共享"一个文件.

我试着将provider设置为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")

我try 与以下人员"分享":

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)

但是,尽管它没有崩溃,但什么也没有发生.

我错过了什么?这是共享文件的正确方式吗?

推荐答案

正如@Commonware's link中所描述的,我缺少Intent.createChooser个.

这项工作:

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类型.

Android相关问答推荐

长流与长流的比较<>

KMM项目生成错误-';在项目';中找不到测试类:共享';

穿戴与iPhone连接的安卓操作系统

如何将Unicode符号作为文本居中放置在布局中的按钮(Android XML)中?

在Android 14/SDK 34中使用RegisterReceiver的正确方式是什么?

Android从已连接的设备获得GATT

在androidStudio中,如何使用带有ResolutionStrategy的ResolutionSelector而不是setTargetResolve()?

如何判断堆肥是否为空?

如何在Android Studio中禁用文件中的Github用户名引用?

如何在 Jetpack Compose 中对齐按钮底部中心?

系统导航栏在某些场景下应用了深色效果

Android CompanionDeviceManager 永远找不到任何附近的蓝牙设备

在 Jetpack Compose 中重用具有重复代码的列

在 Kotlin 中设置 startActivity() 时类型不匹配

Kotlin 调用带参数的函数 Any is xxx ||任何 yyy 都不起作用

Android 12 通过包管理器中断 APK 安装?

Android Compose 创建抖动动画

Unity:Android 上随机接近零的 FPS 下降(提供了很多线索)

对话框中的内容不可见

未使用的内容填充参数