首页 > 解决方案 > 无法将矢量图像从drawable附加到Android Studio上的电子邮件

问题描述

你好。我在将可绘制的矢量图像附加到电子邮件时遇到问题。执行说不能附加空文件。

public void enviarCorreu(View view) {

EditText t = findViewById(R.id.editText);
String email = t.getText().toString();

Drawable drawable = this.getResources().getDrawable(R.drawable.face);

Intent intent = new Intent(Intent.ACTION_SEND);
File f = new File(Uri.parse("android.resource://"+"com.example.m8_activitat2_tematicalliure/"+drawable).toString());

intent.putExtra(Intent.EXTRA_EMAIL,new String[]{email});
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_SUBJECT,email);
intent.putExtra(Intent.EXTRA_TEXT,"Missatge enviat de la imatge");
intent.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(f));

startActivity(Intent.createChooser(intent,"Enviant Correu ... "));
}

标签: javaandroidandroid-intent

解决方案


问题 #1:您使用了错误的Uri方案。

状态的文档EXTRA_STREAM

内容:URI 保存与 Intent 关联的数据流,与 ACTION_SEND 一起使用以提供正在发送的数据。

您正在使用一个android.resource:不是content:. 因此,一些试图响应您的应用程序Intent将不知道如何处理您的Uri.


问题 #2:您没有提供具体的 MIME 类型。

你有:

intent.setType("image/*");

那是无效的。它是您的内容,因此必须提供 MIME 类型。


问题 #3:没有代表矢量可绘制资源的 MIME 类型。

您无法告诉接收应用程序这是什么格式,因为这种格式不是为在应用程序之间传递而设计的。


如果您想ACTION_SEND使用EXTRA_STREAM

  • 使用 a ContentProvider,例如FileProvider,为您的内容提供服务,因此您可以content: Uri使用aEXTRA_STREAM

  • 让该内容具有可识别的 MIME 类型,并在Intent(例如 , image/jpegimage/png中使用该 MIME 类型


推荐阅读