共享图像将路径放入地址

时间:2016-03-28 15:36:41

标签: android android-intent

我遇到此问题,将应用中的图片共享到Gmail会将图片路径放入“收件人”字段。

这是我正在使用的代码:

Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.setType("image/*");
shareIntent.putExtra(Intent.EXTRA_SUBJECT,"Beam Dental Insurance Card");
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // temp permission for receiving app to read this file
shareIntent.setDataAndType(insuranceCardImageUri, getActivity().getContentResolver().getType(insuranceCardImageUri));
shareIntent.putExtra(Intent.EXTRA_STREAM, insuranceCardImageUri);
startActivity(Intent.createChooser(shareIntent, "Share Insurance Card"));

这就是我得到的。

enter image description here

To:字段将填充图像路径,并从前面删除“content:”。我已尝试在意图上设置EXTRA_EMAIL,但这没有帮助。

2 个答案:

答案 0 :(得分:5)

首先,替换:

shareIntent.setDataAndType(insuranceCardImageUri, getActivity().getContentResolver().getType(insuranceCardImageUri));

使用:

shareIntent.setType(getActivity().getContentResolver().getType(insuranceCardImageUri));

由于ACTION_SENDUri的数据字段中未使用Intent

然后,删除:

shareIntent.setType("image/*");

因为您不需要拨打setType()两次(或者甚至拨打setType()setDataAndType(),就像您在此处一样)。

另外,请记住:

  • 如果Uri未来自您的应用(例如,您自己的ContentProvider),则Gmail等第三方应用可能无法使用,因为它们可能没有允许访问它。这与将URL传递给第三方应用程序没有什么明显不同,其中URL要求经过身份验证的用户会话才有用。

  • ACTION_SEND实施不需要尊重 EXTRA_STREAM EXTRA_TEXT`。

答案 1 :(得分:1)

您可以使用共享意图共享图像,但您必须将图像解码为本地化的位图

Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_TEXT, "Hey view/download this image");
String path = Images.Media.insertImage(getContentResolver(), loadedImage, "", null);
Uri screenshotUri = Uri.parse(path);

intent.putExtra(Intent.EXTRA_STREAM, screenshotUri);
intent.setType("image/*");
startActivity(Intent.createChooser(intent, "Share image via..."));

loadedImage是来自http://eofdreams.com/data_images/dreams/face/face-03.jpg

的加载位图

根据Nitin Misra