Недавно пользователи начали сообщать о проблемах при совместном использовании файлов из моего приложения для Android с помощью Gmail. Вложение получатель получает пустым. Мне никогда не удавалось воспроизвести на своих устройствах, но они прислали мне такие электронные письма, и я видел пустое вложение.
Похоже, это происходит исключительно на Android 7 и выше.
Вот как я делюсь файлом в своем приложении:
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setClassName(activityInfo.packageName, activityInfo.name);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"});
intent.putExtra(Intent.EXTRA_TEXT, "Some text");
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
Uri uri = FileProvider.getUriForFile(context, getFileProviderAuthority(), textFile);
intent.putExtra(Intent.EXTRA_STREAM, uri);
context.grantUriPermission(activityInfo.packageName, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
context.startActivity(intent);
На данный момент я не мог понять, почему это происходит с некоторыми пользователями, а с другими - нет. У большинства из них установлена последняя версия Gmail.
Я заметил одну вещь: когда я смотрю на исходное письмо, которое я получаю от этих пользователей, письма от проблемных пользователей выглядят следующим образом:
----_com.android.email_1901922805148181
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: base64
*encoded email body*
----_com.android.email_1901922805148181
Content-Type: text/plain; name = "filename.txt"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename = "filename.txt"; size=262
----_com.android.email_1901922805148181--
А вот от обычных пользователей выглядят так:
--001a1145af74a967fe0566ff756c
Content-Type: text/html; charset = "UTF-8"
Content-Transfer-Encoding: quoted-printable
*email body*
--001a1145af74a967fe0566ff756c--
--001a1145af74a968010566ff756e
Content-Type: text/plain; charset = "US-ASCII"; name = "log.txt"
Content-Disposition: attachment; filename = "log.txt"
Content-Transfer-Encoding: base64
Content-ID: <1620c22fd58144d0cc61> X-Attachment-Id: 1620c22fd58144d0cc61
*encoded attachment*
--001a1145af74a968010566ff756e--
Мы смогли воспроизвести эту проблему из любого приложения, которое может обмениваться файлами через намерение ACTION_SEND, выбрав вместо этого Gmail и с использованием учетной записи электронной почты, отличной от Google (т.е. не адрес электронной почты Gmail).
Необходимым условием для воспроизведения является добавить текст в тело письма вручную перед отправкой электронного письма (недостаточно иметь некоторый текст в намерении EXTRA_TEXT). Без добавления текста вложение отправляется правильно. С текстом он не может быть открыт получателем.
Да, я указал поставщика файлов
Не знаю, причина ли это, но context.grantUriPermission(activityInfo.packageName, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION); довольно странный. Вместо этого я бы использовал intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); . `
Вот что рекомендует документация Android: developer.android.com/reference/android/support/v4/content/…
Может быть. Просто попробуйте! Вы не знаете, что делать еще не так ли? У меня таких проблем нет.
Спасибо за отправку, мы тоже это видим
Нам не удалось воспроизвести это даже с учетной записью IMAP. Есть ли у вас какие-либо другие идеи? Мы действительно хотели бы иметь возможность воспроизвести его.
Используйте Android 7, настройте учетную запись Yahoo или Outlook в настройках учетных записей и удалите все учетные записи Google на устройстве. Экспортируйте файл из любого приложения в Gmail, добавьте текст в основной текст и отправьте. Не стесняйтесь присылать мне видео, если оно все еще не работает, чтобы узнать, не упустил ли я что-то :)
Спасибо, попробуем! Вы нашли решение или обходились? Было бы очень полезно, если бы вы могли написать мне, Алекс в invoicesimple dot com
Спасибо, Гилаумме, теперь мы можем воспроизвести его, уф. Похоже, это ошибка Gmail, а? Не уверен, есть ли обходной путь или нет.
Похоже, что эта ошибка была исправлена в последней версии Gmail для Android: 8.3.12.190852125.
Убедитесь, что вы выполнили эти шаги: developer.android.com/training/secure-file-sharing/…