java - Android:如何在不将屏幕截图保存到 SD 卡的情况下在电子邮件中发送屏幕截图?

标签 java android android-intent bitmap

我读过的每个在 Android 中通过电子邮件发送屏幕截图的示例都涉及先将位图保存到 SD 卡,然后引用图片以将其通过电子邮件发送。有没有一种方法可以在不先将屏幕截图保存到手机的情况下发送屏幕截图?

最佳答案

欢迎您尝试为 openFile() 返回的 ParcelFileDescriptor 创建一个使用管道而不是文件的流式 ContentProvider >。您的提供商将提供来自堆空间的屏幕截图,写入您从管道末端获得的 OutputStream。然后,您将在附件的 EXTRA_STREAM extra 中将 Uri 传递给提供商的流。 This sample app说明了该技术,但在我的例子中,我正在读取一个文件以写入 OutputStream

这是一项相当大的工作,可能无法与所有电子邮件客户端兼容。例如,您的基于管道的流是不可搜索的,并且客户可能认为他们可以在流中搜索以倒带以重新读取各种位。还要记住,您仍然需要将屏幕截图的 Bitmap 转换为 PNG 文件。

如果您担心将文件存储在外部存储中,请将屏幕截图写入内部存储并使用 FileProvider 提供它。 This sample app与上一个类似,并说明了 FileProvider 的使用。

first saving the bitmap to the SD card

大约零个示例将证明这一点,如 removable storage开发人员不容易访问。这些示例可能正在演示写入 external storage .

关于java - Android:如何在不将屏幕截图保存到 SD 卡的情况下在电子邮件中发送屏幕截图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31685318/

相关文章:

java - jsp : delete file when click on html link

java - 从几个条件中选择 jpa

java - 如何以编程方式更改 ListView 内的卡片 View 颜色?

android - 如何获取提供 URI 的位图,java.io.FileNotFoundException : No content provider:/sdcard/Hello/1310610722879. jpg

Android 以编程方式启动 VPNClient (com.ipsec.vpnclient)

java - 为什么 Apache Commons Base32 解码在此处返回任何空数组?

android - 如何检查已安装的应用程序版本是否已过时

Android Webview 响应读取

android - 如何从网站调用 Intent

java - 如何从 Android 的 TimePicker 格式化时间?