Android 如何通过与不同应用程序兼容的意图显示图像

Android 如何通过与不同应用程序兼容的意图显示图像,android,image,android-intent,gmail,share,Android,Image,Android Intent,Gmail,Share,我正在尝试共享我以前保存在磁盘上的图像,发送意向。操作\u发送。问题是我找不到一种方法来兼容不同的应用,官方的Gmail应用和TweetDeck 我要共享的图像包含在文件中: File agendaFile; // its path using getAbsolutePath() -> /data/data/com.mypackage/files/agenda.jpg final Intent intent = new Intent(android.content.Intent.ACT

我正在尝试共享我以前保存在磁盘上的图像,发送
意向。操作\u发送
。问题是我找不到一种方法来兼容不同的应用,官方的Gmail应用和TweetDeck

我要共享的图像包含在
文件中

File agendaFile; 
// its path using getAbsolutePath() -> /data/data/com.mypackage/files/agenda.jpg
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"));
选项A)使用Uri.fromFile 结果
  • Gmail,图像附在邮件上了吗
  • Tweetdeck,图像是否添加到tweet消息中
选项B)使用Uri.parse 结果
  • Gmail,图像附在邮件上了吗
  • Tweetdeck,图像是否添加到tweet消息中
最后 在这两种情况下,我发送的意图如下:

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"));
那么,有没有其他选择来共享图像?如何尽可能与大多数应用程序兼容,这是共享图像的最佳方式

谢谢

试试看

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);

我最终解决了在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

File agendaFile; 
// its path using getAbsolutePath() -> /data/data/com.mypackage/files/agenda.jpg
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"));
这个代码更简单

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);

对我来说,使用FileProvider是可行的。我将其设置为使用内置照相机拍照,并将其用于共享(见下文)


这对我来说也有同样的结果。您使用哪种方式从文件中获取uri?我使用的是Resources(我的图片位于drawable文件夹中),这可能是不同之处,请参阅编辑谢谢您共享您的代码。我试过了,但还是有同样的问题。正如您所说,区别可能在于我的映像来自磁盘,而我在构建uri时出错。无论如何谢谢你!我认为您需要更改以下行:intent.setType(“image/jpg”);至:intent.setType(“图像/jpeg”);image/jpg不是正确的MIME类型,这将导致图像无法正确传递给intent。非常感谢!有类似的和你的方式解决了我的问题。你知道Uri.formfile没有在facebook上发送图片有什么问题吗?什么代理文件?无法解析代理文件中出现错误文件是表示我希望在IntentName问题中共享的图像的文件
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);