Android 在额外流中传递的内容URI显示为;致:“;电子邮件字段

Android 在额外流中传递的内容URI显示为;致:“;电子邮件字段,android,email,android-fileprovider,Android,Email,Android Fileprovider,我正在缓存目录中创建一个文件,希望与其他人共享(通过Gmail/WhatsApp等)。我可以使用FileProvider来实现这一点,它在WhatsApp上运行正常。当选择在Gmail上共享时,照片已正确附加,但我通过Intent.EXTRA_传递的Uri流也会被Gmail解析为新撰写的电子邮件“收件人:”字段中的地址,以及我通过Intent.EXTRA_传递的地址 因此,用户需要在发送前删除假(Uri)电子邮件地址。你知道如何防止这种情况发生吗 Uri contentUri = FilePro

我正在缓存目录中创建一个文件,希望与其他人共享(通过Gmail/WhatsApp等)。我可以使用FileProvider来实现这一点,它在WhatsApp上运行正常。当选择在Gmail上共享时,照片已正确附加,但我通过Intent.EXTRA_传递的Uri流也会被Gmail解析为新撰写的电子邮件“收件人:”字段中的地址,以及我通过Intent.EXTRA_传递的地址

因此,用户需要在发送前删除假(Uri)电子邮件地址。你知道如何防止这种情况发生吗

Uri contentUri = FileProvider.getUriForFile(getActivity(), "com.mypackage.fileprovider", cacheFile);

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setDataAndType(contentUri, "image/jpeg");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.putExtra(Intent.EXTRA_EMAIL, new String[] {"some_address@gmail.com"});
intent.putExtra(Intent.EXTRA_SUBJECT, "Photo");
intent.putExtra(Intent.EXTRA_TEXT, "Check out this photo");
intent.putExtra(Intent.EXTRA_STREAM, contentUri);

if(intent.resolveActivity(getActivity().getPackageManager()) != null)
{
    startActivity(Intent.createChooser(intent, getString(R.string.share_file)));
}
替换:

intent.setDataAndType(contentUri, "image/jpeg");
与:

您的问题不是
EXTRA\u流
,而是将
Uri
放在
Intent
的数据方面


此外,如果您的
minSdkVersion
低于21,您需要接受,因为
Intent
标志在早期版本的Android上不会自动应用于
EXTRA_-STREAM

谢谢,这是固定的。非常尊重你的回答速度。我花了几个小时四处寻找解决方案,但毫无结果。如果我能,我会投你一票的……你必须爱得如此。Android有时表现得很奇怪——如果没有这个平台和像你这样的人,我们都会被诅咒。
intent.setType("image/jpeg");