Java 未经请求权限,通过邮件应用程序共享文件

Java 未经请求权限,通过邮件应用程序共享文件,java,android,android-intent,android-6.0-marshmallow,Java,Android,Android Intent,Android 6.0 Marshmallow,我获取文件Uri,然后使用它构建意图并传递该Uri的读取权限: Intent shareIntent = ShareCompat.IntentBuilder.from(MainActivity.this).setType("image/jpeg") .setStream(uri).getIntent(); String sendTo[] = {"send_to_email@gmail.com"}; shareIntent.putExtra(

我获取文件Uri,然后使用它构建意图并传递该Uri的读取权限:

      Intent shareIntent = ShareCompat.IntentBuilder.from(MainActivity.this).setType("image/jpeg")
          .setStream(uri).getIntent();
      String sendTo[] = {"send_to_email@gmail.com"};
      shareIntent.putExtra(Intent.EXTRA_EMAIL, to);
      shareIntent.setData(uri);
      shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
问题在于
shareIntent.setData(uri)
将uri作为收件人添加到“收件人”字段中,同时添加来自
sendTo[]的电子邮件

通过避免使用
shareIntent.setData(uri)
,可以解决此问题,但根据,如果未设置
setData(uri)
,则标志“授予”\u“读取”\u“uri”权限将不起作用


如何避免在“收件人”字段中添加作为收件人传入的Uri?谢谢

如果minSdkVersion为16或更高,则无需使用
setData()
。系统将把URI复制到Intent的ClipData中,这使得
FLAG\u GRANT\u READ\u URI\u PERMISSION
按预期工作,而无需使用
setData()
。对受影响的电子邮件客户端也值得提出一个bug,因为它甚至不应该查看发送
操作的意图的“数据”部分。谢谢,@cketti,我是针对minSdk 15构建的。如果你的minSdk版本是16或更高,你不需要使用
setData()
。系统将把URI复制到Intent的ClipData中,这使得
FLAG\u GRANT\u READ\u URI\u PERMISSION
按预期工作,而无需使用
setData()
。对受影响的电子邮件客户端也值得提出一个bug,因为它甚至不应该查看发送
操作的意图的“数据”部分。谢谢,@cketti,我在对明斯克15的比赛中打得很好。