【问题标题】:Android: send an email with an image from an ImageViewAndroid:发送带有来自 ImageView 的图像的电子邮件
【发布时间】:2012-07-11 17:42:33
【问题描述】:

我是 stackoverflow 的新手。我的 Android 应用程序有一点问题,特别是 ImageView 会触发点击事件。此事件打开一个带有一些预先编写文本的电子邮件客户端,它应该附加图像的图像。我已经知道之前应该将图像转换为位图,然后压缩并将其发送到电子邮件客户端,但不幸的是我不是 Android/Java 专家,所以我找不到如何做到这一点。这是电子邮件方法的代码:

下面有新代码

我必须替换“String imageURI = null;”的地方带有电子邮件需要的图像。谢谢大家!

编辑:

我设法将我的代码编辑为这个,没有错误:

public void sendMail(ImageView image){
    Intent i = new Intent(Intent.ACTION_SEND);
    int imageURI = R.drawable.img1;

    i.setType("text/plain");
    i.putExtra(Intent.EXTRA_EMAIL  , new String[]{"destinatario@globelife.biz"});
    i.putExtra(Intent.EXTRA_SUBJECT, "Oggetto");
    i.putExtra(Intent.EXTRA_TEXT   , "Globelife");
    i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    i.setType("image/jpeg");
    i.putExtra(Intent.EXTRA_STREAM, Uri.parse("android.resource://"+getPackageName()+"/"+imageURI));


    try {
        startActivity(Intent.createChooser(i, "Send mail..."));
    } catch (android.content.ActivityNotFoundException ex) {
        Toast.makeText(Test01Activity.this, "Non sono presenti app per l'invio di e-mails.", Toast.LENGTH_SHORT).show();
    }

}

但我需要更改“int imageURI = R.drawable.img1;”到“int imageURI = ImageView.src;”或者类似的东西

【问题讨论】:

  • 您要发送的图片是保存在本地 SDCard 上还是来自互联网?
  • 图片在app的drawable文件夹中

标签: android android-imageview email-attachments


【解决方案1】:

试试这个

ImageView iv = (ImageView) findViewById(R.id.splashImageView);
Drawable d =iv.getBackground();
BitmapDrawable bitDw = ((BitmapDrawable) d);
Bitmap bitmap = bitDw.getBitmap();
File  mFile = savebitmap(bitmap);

然后

   Uri u = null;
   u = Uri.fromFile(mFile);

   Intent emailIntent = new Intent(Intent.ACTION_SEND);
   emailIntent.setType("image/*");
   emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Hello...");
   // + "\n\r" + "\n\r" +
   // feed.get(Selectedposition).DETAIL_OBJECT.IMG_URL
   emailIntent.putExtra(Intent.EXTRA_TEXT, "Your tsxt here");
   emailIntent.putExtra(Intent.EXTRA_STREAM, u);
   startActivity(Intent.createChooser(emailIntent, "Send email..."));

savebitmap方法

    private File savebitmap(Bitmap bmp) {
  String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
  OutputStream outStream = null;
  File file = new File(extStorageDirectory, temp + ".png");
  if (file.exists()) {
   file.delete();
   file = new File(extStorageDirectory, temp + ".png");
  }

  try {
   outStream = new FileOutputStream(file);
   bmp.compress(Bitmap.CompressFormat.PNG, 100, outStream);
   outStream.flush();
   outStream.close();
  } catch (Exception e) {
   e.printStackTrace();
   return null;
  }
  return file;
 }

【讨论】:

  • 它在代码的最后一行 ("i.putExtra(Intent.EXTRA_STREAM, bis );") 显示错误“Intent 类型中的方法 putExtra(String, boolean) 不适用于参数 (String, ByteArrayInputStream)"
  • 您的代码没有给出编译错误,但是当我点击图像发送电子邮件时,它在方法 sendMail(ImageView image)(我们正在处理的那个)上给出了 NullPointerException。我现在正在尝试搜索问题所在..
  • LogCat:致命异常:it.neoweb.test.Test01Activity.sendMail(Test01Activity.java:120) 处的主要 java.lang.NullPointerException it.neoweb.test.Test01Activity.onContextItemSelected(Test01Activity.java :92) 在 android.app.Activity.onMenuItemSelected(Activity.java:2199)
  • 我发现了错误,只需更改 Drawable d = iv.getBackground();可绘制 d = iv.getDrawable(); - 希望这会有所帮助!
  • 哦,你设置的图片src不是背景?
【解决方案2】:
Intent i = new Intent(Intent.ACTION_SEND);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setType("image/jpg");
i.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///sdcard/Pictures/
image.jpg"));
startActivity(i);

【讨论】:

    【解决方案3】:
    Intent intent=new Intent(Intent.ACTION_SEND);
    String[] recipients={"destinatario@domain.com"};
    intent.putExtra(Intent.EXTRA_EMAIL, recipients);
    intent.putExtra(Intent.EXTRA_SUBJECT, "Oggetto");
    intent.putExtra(Intent.EXTRA_TEXT   , "Testo");
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    intent.setType("image/png");
    intent.putExtra(Intent.EXTRA_STREAM,Uri.parse(“file///sdcard/Images/your_image.jpg”));//or you can pass the path of your image
    startActivity(Intent.createChooser(intent, "Send mail"));
    

    【讨论】:

      【解决方案4】:

      //重新移动String imageURI=null;

      public void sendMail(ImageView image){
          Intent i = new Intent(Intent.ACTION_SEND);
      
      Uri pngImageUri = Uri.parse(image);
      
      
      i.setType("image/png");//change here with image/png
          i.putExtra(Intent.EXTRA_EMAIL  , new String[]{"destinatario@domain.com"});
          i.putExtra(Intent.EXTRA_SUBJECT, "Oggetto");
          i.putExtra(Intent.EXTRA_TEXT   , "Testo");
          i.putExtra(Intent.EXTRA_STREAM, pngImageUri);
      

      【讨论】:

      • 你好,我正在尝试使用“Uri.parse(image);”但它说“Uri 类型中的方法 parse(String) 不适用于参数 (ImageView)”
      • 然后使用'Uri.fromFile(image);'
      • 它说同样的错误,现在使用 File ("Uri 类型中的方法 fromFile(File) 不适用于参数 (ImageView)")
      猜你喜欢
      • 2013-06-01
      • 2011-12-27
      • 1970-01-01
      • 2015-07-29
      • 2013-11-11
      • 2012-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多