【问题标题】:No image extension when sharing using an intent?使用意图共享时没有图像扩展?
【发布时间】:2015-04-11 16:59:59
【问题描述】:

我使用以下代码来共享图像:

 Uri imguri=Uri.parse("android.resource://PackageName/drawable/"+ R.drawable.img);
 Intent intent=new Intent(Intent.ACTION_SEND);
 intent.setType("image/png");
 intent.putExtra(Intent.EXTRA_STREAM,imguri);
 Intent ch=Intent.createChooser(intent,"Send image");
 startActivity(ch);

文件已发送(例如使用 GMAIL),但问题是没有扩展名。简称为 2130837559。

有没有办法得到真名(img)和扩展名(png)?

【问题讨论】:

  • 请查看此答案以获取名称:stackoverflow.com/a/4263552/1773155
  • 要获得扩展,你可以这样做:filePath.substring(filePath.lastIndexOf("."));
  • @ShajeelAfzal:您和 OP 都不是 Gmail 的作者。您的代码最多与Urirecipient 相关,以挑选出这些值。 OP 是Urisender。此外,他的Uri 没有文件名或文件扩展名。

标签: android android-intent android-resources


【解决方案1】:

这部分取决于电子邮件客户端,而不是您。

部分原因是您的代码没有发送真实姓名或扩展名。 R.drawable.imgint,很可能是十进制的 2130837559。如果您查看您发送的Uri,您将看不到文件名或文件扩展名。

让 Gmail 考虑文件名和扩展名的唯一希望是拥有一个包含这些值的 Uri。解决方案包括:

  • 将资源复制到external storage 上的文件并使用file:// Uri(不推荐)

  • 将资源复制到internal storageusing FileProvider 上的文件中,为您提供content:// Uri

  • 使用my StreamProvider 直接从原始资源中获取价值,并设置name 为生成的Uri 提供文件名和扩展名(注意:这需要您拥有PNG 文件作为原始资源,而不是作为可绘制资源)

【讨论】:

  • 谢谢@CommonWare,但最好的选择是什么? (非常感谢您提供示例代码)。
  • @WildThing:最好的中间选项(可靠但实施起来并不痛苦)是FileProviderThis sample project 演示了该技术。不同之处在于我从资产中复制 PDF 并使用ACTION_VIEW。我还加入了my LegacyCompatCursorWrapper 以提高与各种旧应用程序的兼容性。
【解决方案2】:

你需要做的是改变“R.drawable.img” 在你的“imguri”到“getResources().getResourceEntryName(R.drawable.img)”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多