Отправка файла по электронной почте - не удается получить вложение для работы - Android - PullRequest
1 голос
/ 26 мая 2019

У меня есть приложение, которое создает файл в папке загрузки

Это прекрасно работает - оно использует это, чтобы получить путь к файлу:

File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);

Теперь я пытаюсь прикрепить этот файл к электронному письму, и я думаю, что я близок, однако я получаю сообщение об ошибке от Gmail, что он не может прикрепить файл.

Я изменился с file:// to content://, потому что я не смог обойти другую ошибку до этого.

try {
    final Intent emailIntent = new Intent(Intent.ACTION_SEND);
    emailIntent.setType("plain/text");
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.email_subject));
    URI = Uri.parse("content://" + exportFilePath);
    emailIntent.putExtra(Intent.EXTRA_STREAM, URI);
    emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, getString(R.string.email_body));
    emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    emailIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
    this.startActivity(Intent.createChooser(emailIntent, getString(R.string.action_export)));
}
catch (Throwable t) {
    Toast.makeText(this, "failed: " + t.toString(), Toast.LENGTH_LONG).show();
    Log.e("URI: ", URI.toString());
}

"exportFilePath" содержит полный путь к файлу с момента его создания.
это выглядит так: /storage/emulated/0/Download/file.csv

1 Ответ

0 голосов
/ 26 мая 2019
Uri.parse("content://" + exportFilePath);

Это не так, как вы получаете content Uri. Используйте FileProvider для обслуживания содержимого каталога Downloads, затем используйте FileProvider.getUriForFile(), чтобы получить content Uri для этого файла. Довольно подробные инструкции по использованию FileProvider можно найти в его JavaDocs .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...