Unable to attach file to Email in Android 10

195 views Asked by At

I am trying to attach pdf to Gmail using file provider. It is working on Android 6.0 but says 'Couldn't attach file'

fun startFileShareIntent(filePath: String, context: Context?) {
    try {
        val file = File(filePath)
        val uri = FileProvider.getUriForFile(context!!, "com.trust.inspakt.android.provider", file)

        val intent = ShareCompat.IntentBuilder.from(context as Activity)
            .setType("application/pdf")
            .setStream(uri)
            .setChooserTitle("Choose bar")
            .createChooserIntent()
            .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)

        context.startActivity(intent)

    } catch (e: Exception) {
        e.printStackTrace()
    }

}
1

There are 1 answers

3
Danielle On

I assume from your question that it is working on Android 7.0 and up?

In Android 6.0 there is no need for a file provider. Here is the Java code that I am using to attach a csv file to gmail. This works for me from Android 6.0 up to Android 11.

/* This is the filename or file URI, depending on what Android version you have 
and how you got the filename */
String fileInfo; 
final Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.setType("message/rfc822");
emailIntent.putExtra(Intent.EXTRA_EMAIL,"[email protected]");
emailIntent.putExtra(Intent.EXTRA_SUBJECT,"subject");
emailIntent.putExtra(Intent.EXTRA_TEXT,emailBody);
//add file to email according to build type
if (Build.VERSION.SDK_INT>=Q){
    Uri path = Uri.parse(fileInfo);
    emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    emailIntent.putExtra(Intent.EXTRA_STREAM, path);
}
else if (Build.VERSION.SDK_INT>M) {
    File test_result = new File(fileInfo);
    String authority = context.getApplicationContext().getPackageName() + ".provider";
    Uri path = FileProvider.getUriForFile(context.getApplicationContext(),authority,test_result);
    emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    emailIntent.putExtra(Intent.EXTRA_STREAM, path);
}
else {
    File test_result = new File(fileInfo);
    Uri path = Uri.fromFile(test_result);
    emailIntent.putExtra(Intent.EXTRA_STREAM, path);
}

//send email
context.startActivity(emailIntent);