在Android应用程序中发送带有多个文本附件的Gmail邮件时出现问题

时间:2019-03-01 23:22:18

标签: java android gmail email-attachments android-fileprovider

我正在尝试发送一封电子邮件,其中包含作为附件存储在外部存储器中的文件。它们存储在/ storage / emulated / 0 / data /中。当我尝试在Gmail中发送邮件时,它们似乎已显示在“撰写电子邮件”屏幕中,但未显示在收到的邮件中。如果我选择将文件共享到Google云端硬盘而不是Gmail,则没有问题,它们可以正常上传。对我来说很奇怪,一个会工作,而另一个不会。有人知道为什么会这样吗?这就是我想要的相关代码。

在MainActivity.java

public void onClickEmail(View view) {
    Intent emailIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
    emailIntent.setType("text/plain");
    emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, EMAIL_RECIPIENT);
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, EMAIL_SUBJECT);
    emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

    ArrayList<Uri> uris = new ArrayList<Uri>();

    //convert from paths to Android friendly Parcelable Uri's
    for (String filename : filenames)
    {
        File fileIn = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+FOLDER_NAME, filename);
        Uri u = FileProvider.getUriForFile(MainActivity.this, MainActivity.this.getApplicationContext().getPackageName() + ".provider", fileIn);
        uris.add(u);
    }

    emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);

    try {
        startActivity(Intent.createChooser(emailIntent, "Send mail..."));
    } catch (android.content.ActivityNotFoundException ex) {
        Toast.makeText(MainActivity.this, "There is no email client installed.", Toast.LENGTH_LONG).show();
    }
}

在AndroidManifest.xml中

    <uses-feature android:name="android.hardware.usb.host" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <provider
            android:name=".GenericFileProvider"
            android:authorities="jackreuter.biobot.provider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths"/>
        </provider>

    </application>

0 个答案:

没有答案