Android 导出到Gmail时为空附件

Android 导出到Gmail时为空附件,android,android-intent,gmail,Android,Android Intent,Gmail,用户最近开始报告使用Gmail从我的Android应用程序共享文件时出现的问题。收件人收到的附件为空。我一直无法在我的设备上复制,但他们给我发送了这样的电子邮件,我看到了空的附件 这似乎只发生在安卓7及以上版本上 以下是我在应用程序中共享文件的方式: Intent intent = new Intent(Intent.ACTION_SEND); intent.setClassName(activityInfo.packageName, activityInfo.name); intent.set

用户最近开始报告使用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@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--
来自普通用户的信息如下所示:

----_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--
--001a1145af74a967fe0566ff756c
内容类型:text/html;charset=“UTF-8”
内容传输编码:引用可打印
*电子邮件正文*
--001a1145af74a967fe0566ff756c--
--001a1145af74a968010566ff756e
内容类型:文本/纯文本;charset=“US-ASCII”;name=“log.txt”
内容处置:附件;filename=“log.txt”
内容传输编码:base64
内容ID:X-附件ID:1620c22fd58144d0cc61
*编码附件*
--001a1145af74a968010566ff756e--
更新 我们已经能够从任何可以通过
ACTION\u SEND
intent共享文件的应用程序中复制这个问题,选择Gmail并使用非Google电子邮件帐户(即非Gmail电子邮件地址)


复制的一个必要条件是在发送电子邮件之前在电子邮件正文中手动添加一些文本(仅在意向文本中添加一些文本是不够的)。如果不添加文本,附件将正确发送。使用文本时,接收者无法打开它。

最新版本的Android Gmail:8.3.12.190852125中似乎已修复了此错误。请确保已完成以下步骤:是的,我已指定了文件提供程序不知道原因,但
context.grantUriPermission(activityInfo.packageName,uri,Intent.FLAG_GRANT_READ_uri_PERMISSION);
非常奇怪。我会使用
Intent.setFlags(Intent.FLAG_GRANT_READ_uri_PERMISSION);
取而代之。`这是Android文档建议的:使用Android 7,在设置帐户中设置Yahoo或Outlook帐户,并删除设备上的所有Google帐户。将任何应用程序中的文件导出到Gmail,在正文中添加一些文本并发送。如果仍然不起作用,请随时向我发送视频,看看我是否遗漏了什么:)