首页 > 解决方案 > 如何打开whats app和gmail的选择器意图仅在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)

标签: javaandroidkotlinandroid-intentandroid-intent-chooser

解决方案


如何将附件发送到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>

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

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?

请参阅此链接 https://stackoverflow.com/a/8550043/8750174


推荐阅读