如何显示通过一个意图是与不同的应用程序兼容的图像(How to show an image thro

2019-06-27 01:31发布

我想分享我以前保存在磁盘上的图像,发送Intent.ACTION_SEND 。 问题是,我不能找到一种方法,与不同的应用程序,官方Gmail应用和TweetDeck的在我的案件兼容。

我想分享的图像包含在File

File agendaFile; 
// its path using getAbsolutePath() -> /data/data/com.mypackage/files/agenda.jpg

选项A)使用Uri.fromFile

Uri agendaUri = Uri.fromFile(agendaFile); 
// the value -> file:///data/data/com.mypackage/files/agenda.jpg

结果

  • Gmail的,是attatched到电子邮件中的图像? 没有
  • TweetDeck的,是添加到鸣叫消息图像?

使用Uri.parse选项B)

Uri agendaUri = Uri.parse(agendaFile.toURI().toString()); 
// the value -> file:/data/data/com.mypackage/files/agenda.jpg

结果

  • Gmail的,是attatched到电子邮件中的图像?
  • TweetDeck的,是添加到鸣叫消息图像? 没有

最后

在这两种情况下,我发的意图是这样的:

final Intent intent = new Intent(android.content.Intent.ACTION_SEND);
intent.setType("image/jpg");
intent.putExtra(android.content.Intent.EXTRA_STREAM, agendaUri);
startActivity(Intent.createChooser(intent, "title"));

那么,有没有任何其他方式分享图像? 它是如何共享的图像是与大多数应用程序尽可能兼容的最佳方式?

谢谢!

Answer 1:

尝试

intent.setType("image/*");

对我来说它适用于Twitter的,WhatsApp的,蓝牙....

编辑:全码:

Intent intent = new Intent();
        intent.setAction(Intent.ACTION_SEND);
        intent.setType("image/*");

        intent.putExtra(android.content.Intent.EXTRA_SUBJECT, title);
        intent.putExtra(android.content.Intent.EXTRA_TEXT, R.string.visita);
        Uri uri = Uri
        .parse("android.resource://com.package.xname/drawable/"
                + i);
        intent.putExtra(Intent.EXTRA_STREAM, uri);


Answer 2:

我终于解决了存储在MediaStore图像的问题。 而不是使用我做的是文件的URI:

String agendaFilename = agendaFile.getAbsolutePath();

final ContentValues values = new ContentValues(2);
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
values.put(MediaStore.Images.Media.DATA, agendaFilename);
final Uri contentUriFile = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

最后我用contentUriFile

final Intent intent = new Intent(android.content.Intent.ACTION_SEND);
intent.setType("image/jpg");
intent.putExtra(android.content.Intent.EXTRA_STREAM, contentUriFile);
startActivity(Intent.createChooser(intent, "title"));


Answer 3:

这个代码更容易

Intent intent = new Intent(Intent.ACTION_SEND);
            intent.setData(Uri.parse("mailto:"));
            intent.putExtra(intent.EXTRA_EMAIL,"XXXXX@XXXX.com");
            intent.putExtra(intent.EXTRA_SUBJECT, "XXXXX");
            intent.putExtra(Intent.EXTRA_TEXT, "XXXXX");
            intent.setType("message/rfc822");
            chosser = Intent.createChooser(intent, "Enviar Email");
            intent.putExtra(intent.EXTRA_STREAM, uri);
            startActivity(chosser);


Answer 4:

对我来说,使用FileProvider制定。 我有它设置为与内置摄像头拍照,并用它分享(见下文)。

final Uri uri = FileProvider.getUriForFile(mActivity, "com.paeuba.paragonik.fileprovider", photoFile);
Intent intent = ShareCompat.IntentBuilder.from(mActivity).setType("image/jpeg").setStream(uri).createChooserIntent();
mActivity.startActivity(intent);


文章来源: How to show an image through an intent being compatible with different apps