安卓:分享未保存到SD卡的位图

6

我有一个应用程序,可以截取屏幕并使用共享意图分享。为了避免每次用户想要简单地分享图像时保存多个图像,以下是我用于保存到SD卡的图像的代码:

Intent share = new Intent(Intent.ACTION_SEND);
share.setType("image/png");

dir = "file://" + Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "Folder/" + location;
share.putExtra(Intent.EXTRA_STREAM, Uri.parse(dir));

startActivity(Intent.createChooser(share, "Share Image"));

然而,我无法弄清楚如何简单地保存位图,例如...
share.putExtra(Intent.EXTRA_STREAM, theBitmap);

有没有一种方法可以在不保存图像的情况下完成这个操作?
谢谢。
3个回答

4
我最终所做的是将一张“临时”图像保存到SD/手机上,每次都覆盖它。

这也是我所做的,但我宁愿不使用SD卡(并请求外部存储读/写权限)。似乎有一种使用内部存储器完成此操作的方法。 - Suragch
这个问答值得一读:https://dev59.com/sGox5IYBdhLWcg3wq2EC - Suragch

1
尝试使用这个:
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
Uri uri = Uri.parse("android.resource://com.your.app/drawable/" + yourimage);
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
shareIntent.putExtra(Intent.EXTRA_TEXT, shareImage);
shareIntent.setType("image/*");
startActivity(Intent.createChooser(shareIntent, "Send your image"));

对我来说,这段代码可以成功发送我在应用中使用的可绘制对象。没有图片保存在SD卡上。唯一的问题是它不能与某些社交应用程序一起使用 :/


它只需要从您的应用程序中获取可绘制对象,希望这可以帮助到您。 - Far sea sailor
但是这对于您使用应用程序创建的新图像没有帮助。 - Suragch

-1

是的,您可以发送图像而无需将其保存为文件。从您发布的代码中,我不知道您如何发送图像,但您可以使用以下方法转换文件:

                ByteArrayOutputStream bos = new ByteArrayOutputStream();
                byte[] data;
                if(yourBitmap!=null){
                yourBitmap.compress(CompressFormat.PNG, 75, bos);
                }else if (yourBitmap==null){
                    Log.w("Image going to server is null","Lost in memory");
                }
                try{
                data = bos.toByteArray();

我不知道你是通过你的应用程序将图像发送给另一个用户,还是怎样,但这就是我使用它上传到服务器的方式。当你完成图像后,只需将其全部置空,就像这样。

                bos = null;
                data = null;
                yourBitmap = null;

嗨,这更像是关于share.putExtra(Intent.EXTRA_STREAM, Uri.parse(dir))的问题,Uri需要替换成什么呢? - Chris
我似乎无法让它工作,我尝试了share.putExtra(Intent.EXTRA_STREAM, data),但是没有任何附件,而且data不为null。有什么想法吗? - Chris
你是如何使用Intent发送字节数组的?据我所知,你不能仅仅将东西放入Intent中并让它们自动完成。通常情况下,你会使用Intent来启动另一个活动或者用它来启动一个服务。我认为你应该研究一下如何通过Intent将文件附加到电子邮件或短信中,因为在阅读了你的帖子后,现在我已经休息了一些时间,似乎你需要创建一个图像,使用数据中的引用,并将其引用附加到Intent中,然后使用startActivity。我现在正要出门,希望这能帮到你。 - James andresakis
这位用户的帖子展示了如何在Android中通过邮件附件发送图片。我知道你不想保存这张图片,但是我相信你可以找到一种在内存中存储并从中引用图片的方法。 - James andresakis
上面的链接展示了如何分享已经写入SD卡的图片,所以完全不符合你所建议的内容。 - Webreaper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接