2011-09-29 27 views
6

Actualmente estoy intentando crear una aplicación que tomará una foto y luego adjuntaré esa imagen a un correo electrónico que irá a una dirección de correo electrónico predeterminada.Android: ¿Cómo enviar una imagen como archivo adjunto de correo electrónico desde la aplicación?

Tengo el correo electrónico en funcionamiento y la cámara está funcionando. Parece que no puedo obtener la imagen que la cámara ha tomado para agregar como archivo adjunto. Tengo la imagen apareciendo en la aplicación como una especie de imagen de vista previa que no tengo problemas para eliminar si es por eso que no se adjuntará.

Cuando se envía el correo electrónico, se crea una imagen pero está dañada y no se abre. Es como si estuviera creando una imagen inexistente. ¡Creo que será un caso de vincular la imagen tomada a la parte del archivo adjunto de creación, pero no tengo ni idea! Si alguien pudiera ayudar, ¡estaría extremadamente agradecido!

Aquí es mi MainActivity donde se está creando el correo electrónico, junto con la cámara:

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[]{ "[email protected]"}); 

             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){       
         //     
         }   
      } } 
    } 

estoy esperando su algo simple que simplemente no estoy enlazándolos.

Respuesta

3
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[]{"[email protected]"}); 
      i.putExtra(Intent.EXTRA_SUBJECT,"On The Job"); 
      //Log.d("[email protected][email protected]#!#[email protected]##!", 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()); 
     } 

    } 
} 
+0

yo sólo lo intentó y funcionó para mí, espero que ayude! Por favor, acepte si lo hace :) – Beast

+0

¡Gracias! ¡Funcionando perfectamente! – PaulH

+0

Acabo de descubrir algo. No enviará el correo electrónico sin que se tome una foto ahora. ¿Todavía hay que enviar el correo electrónico si no se ha tomado una foto? – PaulH

0

probar esto

 Intent i = new Intent(Intent.ACTION_SEND); 
    i.setType("text/plain"); 
    i.putExtra(Intent.EXTRA_EMAIL , new String[]{"[email protected]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...")); 
Cuestiones relacionadas