在Android

时间:2018-02-11 21:33:40

标签: java android image text share

我已经尝试了几个小时来分享文字和文字。使用Intent.ACTION_SEND的图片(同时)。尽管我试图让它发挥作用,但我仍然无法做到。

我在Google上搜索过,这可能很奇怪,但我只发现了两篇关于如何分享文字和帖子的帖子。图像同时,我尝试了它们但是没有一个工作。我尝试使用一种方法,这就是我最终得到的结果:

Uri imageToShare = Uri.parse("android.resource://com.example.application/drawable/invite"); //Image to be shared
String textToShare = "Text to be shared"; //Text to be shared

Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_SUBJECT, textToShare);
shareIntent.setType("*/*");
shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
shareIntent.putExtra(Intent.EXTRA_TEXT, imageToShare);
startActivity(Intent.createChooser(shareIntent, "Share with"));
  • 上面的代码显示错误消息"分享失败,请重试。"
  • 我要发送的图片是invite.png,它位于drawable文件夹中。
  • 我正在使用安装了Android O(8.0)的手机。

我希望以上信息有用。我还是Java的初学者,非常感谢任何帮助!

4 个答案:

答案 0 :(得分:1)

此代码将允许您发送任何带有文本的位图图像。

Bitmap decodedByte = BitmapFactory.decodeResource(getResources(), R.drawable.refer_app);
            Uri imageToShare = Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(), decodedByte, "Share app", null));   // in case of fragment use [context].getContentResolver()
            String shareMessage = "message to share";
            Intent share = new Intent(Intent.ACTION_SEND);
            share.setType("image/*");
            share.putExtra(Intent.EXTRA_TEXT, shareMessage);
            share.putExtra(Intent.EXTRA_STREAM, imageToShare);
            startActivity(Intent.createChooser(share, "Share via"));

答案 1 :(得分:0)

这对我有用:

Intent iShare = new Intent(Intent.ACTION_SEND);
iShare.setType("image/*");
iShare.putExtra(Intent.EXTRA_TEXT, "Your text”);
iShare.putExtra(Intent.EXTRA_STREAM, Your image);
startActivity(Intent.createChooser(iShare, "Choose app to share photo with!"));

答案 2 :(得分:0)

首先,不要求任何应用支持通过ACTION_SEND共享文字和图片。

其次,图片的Uri位于EXTRA_STREAM as notyou pointed out

第三,很少有应用知道如何将android.resource作为Uri方案处理。毕竟,那不是the documented scheme for an EXTRA_STREAM Uri。它必须是content,您可以通过ContentProvider来提供内容,例如FileProvider

第四,如果您指定实际的MIME类型,而不是使用通配符,则可能会有更好的运气。

答案 3 :(得分:0)

我终于设法以更简单的方式做到了!我从图像中创建了一个base64,并将其作为字符串添加到strings.xml文件中(确保从字符串的开头删除data:image/png;base64,)。

我使用的代码如下:

byte[] decodedString = Base64.decode(getString(R.string.share_image), Base64.DEFAULT); //The string is named share_image.
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
Uri imageToShare = Uri.parse(MediaStore.Images.Media.insertImage(MainActivity.this.getContentResolver(), decodedByte, "Share image", null)); //MainActivity.this is the context in my app.
String textToShare = "Sample text"; //Text to be shared

Intent share = new Intent(Intent.ACTION_SEND);
share.setType("image/*");
share.putExtra(Intent.EXTRA_TEXT, textToShare);
share.putExtra(Intent.EXTRA_STREAM, imageToShare);
startActivity(Intent.createChooser(share, "Share with"));

我希望这个答案可以解决许多人的问题!

非常感谢@notyou& @CommonsWare