【问题标题】:Android: How to send an image as email attachment from application?Android:如何从应用程序将图像作为电子邮件附件发送?
【发布时间】:2011-11-28 02:29:08
【问题描述】:

我目前正在尝试创建一个应用程序,该应用程序将拍摄一张照片,然后将该照片附加到一封电子邮件,该电子邮件将发送到一个预先确定的电子邮件地址。

我的电子邮件工作正常,我的相机工作正常。我似乎无法获取相机拍摄的照片以添加为附件。我在应用程序中弹出图像作为一种预览图像,如果这就是它不会附加的原因,我可以毫无问题地取出它。

发送电子邮件时,图片已创建,但已损坏且无法打开。就好像我在创造一幅不存在的画面。我认为这将是一个将拍摄的照片绑定到创建附件部分的情况,但我不知道!如果有人可以提供帮助,我将非常感激!

这是我的MainActivity,电子邮件正在与相机一起创建:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;

import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore.Images;
import android.provider.MediaStore.Images.Media;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;

public class EmailActivity extends Activity {
        Button send;
        EditText address, subject, emailtext;
        protected static final int CAMERA_PIC_REQUEST = 0;



    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.email);
        send=(Button) findViewById(R.id.emailsendbutton);
        address=(EditText) findViewById(R.id.emailaddress);
        subject=(EditText) findViewById(R.id.emailsubject);
        emailtext=(EditText) findViewById(R.id.emailtext);

        send.setOnClickListener(new OnClickListener() {

                        @Override
                        public void onClick(View v) {
                                // TODO Auto-generated method stub

                            if
                            (!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()))
                            {

                            }

                            File pngDir = new File(

                                    Environment.getExternalStorageDirectory(),
                                    "Android/data/com.phstudios.jbrefurb/quote");

                            if (!pngDir.exists())
                                pngDir.mkdirs();

                            File pngFile = new File(pngDir, "pic1.png");
                            Uri pngUri = Uri.fromFile(pngFile);


                                     Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);

                                      emailIntent.setType("image/png");

                                      emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{ "random@yahoo.co.uk"});

                                      emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject.getText());

                                      emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, emailtext.getText());

                                      emailIntent.putExtra(android.content.Intent.EXTRA_STREAM, pngUri);

                                      emailIntent.setType("image/png");


                                    EmailActivity.this.startActivity(Intent.createChooser(emailIntent, "Send mail..."));

     }
            });

 Button camera = (Button) findViewById(R.id.button2); 
        camera.setOnClickListener(new View.OnClickListener() { 
            public void onClick(View view) {
                Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                  startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);  
;

                }     
            });  
        }  

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {         
        if (requestCode== 0 && resultCode == Activity.RESULT_OK){                 
            Bitmap x = (Bitmap) data.getExtras().get("data");                 
            ((ImageView)findViewById(R.id.imageView1)).setImageBitmap(x);                 
            ContentValues values = new ContentValues();

            values.put(Images.Media.TITLE, "title");         
            values.put(Images.Media.BUCKET_ID, "test");         
            values.put(Images.Media.DESCRIPTION, "test Image taken");         
            values.put(Images.Media.MIME_TYPE, "image/png");         
            Uri uri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values);         
            OutputStream outstream;                 
            try {                         
                outstream = getContentResolver().openOutputStream(uri);          
                x.compress(Bitmap.CompressFormat.JPEG, 70, outstream);         
                outstream.close();                 
                } catch (FileNotFoundException e) {                         
                    //                 
                    }catch (IOException e){                         
                        //                 
                        }         
            } }   
    } 

我希望它很简单,我只是没有将它们链接在一起。

【问题讨论】:

    标签: android image email camera attachment


    【解决方案1】:
    import android.os.Bundle;
    import android.app.Activity;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.support.v4.app.NavUtils;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    
    
    import android.content.ContentValues;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.graphics.Bitmap.CompressFormat;
    import android.net.Uri;
    
    import android.provider.MediaStore.Images;
    import android.provider.MediaStore.Images.Media;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ImageView;
    
    
     public class MainActivity extends Activity {
      Button send;
      Bitmap thumbnail;
      File pic;
      EditText address, subject, emailtext;
      protected static final int CAMERA_PIC_REQUEST = 0;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        send=(Button) findViewById(R.id.emailsendbutton);
        address=(EditText) findViewById(R.id.emailaddress);
        subject=(EditText) findViewById(R.id.emailsubject);
        emailtext=(EditText) findViewById(R.id.emailtext);
    
    
    
    
    
    
    
    
    
    
        Button camera = (Button) findViewById(R.id.button1); 
        camera.setOnClickListener(new View.OnClickListener() {
    
            @Override
            public void onClick(View arg0){
                Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);  
    
            }
            });
    
            send.setOnClickListener(new OnClickListener() {
    
            @Override
            public void onClick(View arg0){
    
                Intent i = new Intent(Intent.ACTION_SEND);
                i.putExtra(Intent.EXTRA_EMAIL, new String[]{"fake@fake.edu"});
                i.putExtra(Intent.EXTRA_SUBJECT,"On The Job");
                //Log.d("URI@!@#!#!@##!", Uri.fromFile(pic).toString() + "   " + pic.exists());
                i.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(pic));
    
                i.setType("image/png");
                startActivity(Intent.createChooser(i,"Share you on the jobing"));
            }
            });
    
    
    } 
    
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
        if (requestCode == CAMERA_PIC_REQUEST) {  
         thumbnail = (Bitmap) data.getExtras().get("data");  
        ImageView image = (ImageView) findViewById(R.id.imageView1);  
        image.setImageBitmap(thumbnail);
    
    
            try {
                File root = Environment.getExternalStorageDirectory();
                if (root.canWrite()){
                     pic = new File(root, "pic.png");
                    FileOutputStream out = new FileOutputStream(pic);
                    thumbnail.compress(CompressFormat.PNG, 100, out);
                    out.flush();
                    out.close();
                }
            } catch (IOException e) {
                Log.e("BROKEN", "Could not write file " + e.getMessage());
            }   
    
        }  
    } 
    

    【讨论】:

    • 我刚试过,它对我有用,希望对你有帮助!如果是,请接受:)
    • 谢谢!完美运行!
    • 刚刚发现了一些东西。它不会在没有拍照的情况下发送电子邮件。如果没有拍照,是否还可以发送电子邮件?
    • @PaulH 你可以试试这个:androidhub4you.com/2013/09/…
    【解决方案2】:

    试试这个

            Intent i = new Intent(Intent.ACTION_SEND);
        i.setType("text/plain");
        i.putExtra(Intent.EXTRA_EMAIL  , new String[]{"123@gmail.com"});
        i.putExtra(Intent.EXTRA_SUBJECT, " report");
        i.putExtra(Intent.EXTRA_TEXT   , "PFA");
        i.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(destinationFile));//pngFile 
    
            startActivity(Intent.createChooser(i, "Send mail..."));
    

    【讨论】:

      【解决方案3】:

      试试这个

              send.setOnClickListener(new View.OnClickListener() {
      
                  @Override
      
                  public void onClick(View arg0) {
                      Intent i = new Intent(Intent.ACTION_SEND);
                      i.putExtra(Intent.EXTRA_EMAIL, new String[]{"fake@fake.edu"});
                      i.putExtra(Intent.EXTRA_SUBJECT, "On The Job");
                      //Log.d("URI@!@#!#!@##!", Uri.fromFile(pic).toString() + "   " + pic.exists());
                      if(pic != null)
                      {  i.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(pic));}
      
                      i.setType("image/png");
                      i.setType("message/rfc822");
      
                      startActivity(Intent.createChooser(i, "Share you on the jobing"));
      
                  }
              });
          }
      

      【讨论】:

      • 欢迎来到SO,请解释一下你的答案
      • 此代码将允许用户通过从图库中选择图像或从相机中捕获来发送电子邮件,实际上我已经复制了上述代码但重写它们以解决上述问题
      猜你喜欢
      • 1970-01-01
      • 2013-02-26
      • 2011-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-06
      • 1970-01-01
      相关资源
      最近更新 更多