FlatDog
FlatDog

Reputation: 2733

Unable to add attachment to email (Android, Kotlin)

I have an export button in my app that executes the below code. The email app opens correctly with the subject etc., but it's missing the attachment. I don't seem to be able to get the attachment to work. Any ideas what I'm doing wrong?

    val filename = "Export.csv"
    val path = context?.getExternalFilesDir(null) //get file directory for this package

    //create fileOut object
    val fileOut = File(path, filename)

    //delete any file object with path and filename that already exists
    fileOut.delete()

    //create a new file
    fileOut.createNewFile()

    //append the header and a newline
    fileOut.appendText("Case Number,Form Type,Status,Last Updated Date")
    fileOut.appendText("\n")

    for (item in arrayAll) {
        fileOut.appendText("${item.number},${item.formType},${item.status},${item.LUD}")
        fileOut.appendText("\n")
    }

val contentUri = FileProvider.getUriForFile(this.requireContext(),"${BuildConfig.APPLICATION_ID}.fileProvider", fileOut)

    val emailIntent = Intent(Intent.ACTION_SENDTO).apply {
        data = Uri.parse("mailto:") // only email apps should handle this
        putExtra(Intent.EXTRA_SUBJECT, "Export.csv")
        putExtra(Intent.EXTRA_STREAM, contentUri)
        addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
    }

    this.startActivity(emailIntent)

Manifest:

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

provider_paths:

<?xml version="1.0" encoding="utf-8"?>

<paths>

    <root-path name="root" path="." />

</paths>

Upvotes: 0

Views: 681

Answers (1)

Cameron Stobie
Cameron Stobie

Reputation: 59

Following from you latest comment; According to the Android docs Intent.ACTION_SENDTO is for when you don't want attachments, I think you need to change this line val emailIntent = Intent(Intent.ACTION_SENDTO).apply { to val emailIntent = Intent(Intent.ACTION_SEND).apply { to get your email app to display the attachment

Upvotes: 1

Related Questions