我正在缓存目录中创建一个我想与他人分享的文件(通过Gmail / WhatsApp等)。我可以使用FileProvider来做到这一点,它适用于WhatsApp。当选择在Gmail上共享时,照片已正确附加,但我通过Intent.EXTRA_STREAM传递的Uri也最终被Gmail解析为新撰写的电子邮件的“收件人:”字段中的地址以及地址( es)我通过Intent.EXTRA_EMAIL传递。
因此,用户需要在发送前删除伪造(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)));
}
答案 0 :(得分:11)
替换:
intent.setDataAndType(contentUri, "image/jpeg");
使用:
intent.setType("image/jpeg");
您的问题不是EXTRA_STREAM
,而是您将Uri
放在Intent
的数据方面。
此外,如果您的minSdkVersion
低于21,则需要some extra steps to ensure that clients can read the content,因为Intent
标记未在早期版本的Android上自动应用于EXTRA_STREAM