如何打开 whats app 和 gmail 的选择器意图仅在 kotlin 中发送附件文档

How to open chooser intent of whats app and gmail only to send an attachment document in kotlin

我只需要将我的应用程序创建的文档发送到 gmail 和 whatsapp。

我得到了 whatsapp 的工作代码,

        val filelocation = GlobalVariables.getMyFilePath(this, "dummy_file.mem")
        val uri = Uri.parse(filelocation.absolutePath)
        val whatsappIntent = Intent(Intent.ACTION_SEND)
        whatsappIntent.type = "text/plain"
        whatsappIntent.setPackage("com.whatsapp")
        whatsappIntent.putExtra(Intent.EXTRA_TEXT, "members file list")
        whatsappIntent.putExtra(Intent.EXTRA_STREAM, uri)
        whatsappIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)

        this.startActivity(whatsappIntent)

基于此,我对 gmail 进行了同样的操作。但没有得到附加。它吐司留言 file not attached

        val email = Intent(Intent.ACTION_SEND)
        email.setPackage("com.google.android.gm")
        email.putExtra(Intent.EXTRA_EMAIL, arrayOf<String>("vikas16acharya@gmail.com"))
        email.putExtra(Intent.EXTRA_SUBJECT, "members file list")
        email.putExtra(Intent.EXTRA_TEXT, message)
        email.putExtra(Intent.EXTRA_STREAM, uri)
        email.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
        email.type = "message/rfc822"

        this.startActivity(email)

如何发送附件到gmail?

要发送文件,您还需要一些东西,

首先在 Manifest->application 添加以下代码段

<provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="${applicationId}.provider"
            android:grantUriPermissions="true"
            android:exported="false">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_provider_paths" />
        </provider>

然后在res下创建一个文件夹xml并添加这个文件

file_provider_paths.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <paths xmlns:android="http://schemas.android.com/apk/res/android">
        <external-files-path name="external_files" path="."/>
    </paths>
</PreferenceScreen>

然后在您的代码中添加下面一行而不是 val uri = Uri.parse(filelocation.absolutePath)

val uri = FileProvider.getUriForFile(this, "${BuildConfig.APPLICATION_ID}.provider", filelocation)

现在您可以发送附件了。

如何在选择器意图操作中仅显示 whatsapp 和 gmail?

参考这个link