android - 导出到 Gmail 时清空附件

标签 android android-intent gmail

用户最近开始报告在使用 Gmail 从我的 Android 应用程序共享文件时出现问题。收件人收到的附件是空的。我一直无法在我的设备上复制,但他们向我发送了此类电子邮件,我看到了空附件。

这似乎只发生在 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@domain.com"});
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 Intent 共享文件的应用中重现此问题,选择 Gmail 并使用非 Google 电子邮件帐户(即不是 Gmail 电子邮件地址)。

复制的必要条件是在发送电子邮件之前手动在电子邮件正文中添加一些文本(在 Intent EXTRA_TEXT中包含一些文本是不够的)。不添加文本,附件发送正确。带有文本,接收方无法打开。

最佳答案

看来此错误已在最新版本的 Android 版 Gmail 中修复:8.3.12.190852125

关于android - 导出到 Gmail 时清空附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49301488/

相关文章:

java - 无法为类型为 org.gradle.api.publication.maven.internal.deployer.DefaultGroovyMavenDeployer 的对象获取未知属性 'GROUP'

android - 无需身份验证即可获取 Twitter 主页时间线(仅应用程序身份验证)

java - 在 Eclipse 中复制包

android - 您如何将信息传递给非 Activity 类?

android - 为什么 FLAG_ACTIVITY_CLEAR_TOP 不起作用?

android - 如何在抽屉导航中传递默认 MenuItem?

android - 使用 ACTION_IMAGE_CAPTURE 访问相机

oauth - 使用 oauth 授予 imap 对 gmail 的访问权限时,我使用什么范围?

Java 通过 gmail 发送电子邮件

用于事件预订的 Gmail 标记不起作用