Android: ¿Cómo enviar una imagen como adjunto de correo electrónico desde la aplicación?

Actualmente estoy intentando crear una aplicación que tome una foto y luego adjunte esa imagen a un correo electrónico que se va a una dirección de correo predeterminada.

Tengo el correo electrónico funcionando y tengo la cámara funcionando. No puedo parecer obtener la imagen que la cámara ha tomado para agregar como un archivo adjunto. Tengo la imagen apareciendo en la aplicación como una especie de vista previa de la imagen que no tengo ningún problema para sacar si es por eso que no va a adjuntar.

Cuando se envía el correo se ha creado una imagen pero está dañada y no se abre. Es como si estuviera creando una imagen inexistente. Creo que será un caso de atar la imagen tomada a la parte de creación de adjuntos, pero no tengo ni idea! Si alguien pudiera ayudar, estaría muy agradecido!

Aquí está 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){ // } } } } 

Espero que sea algo simple que no estoy uniendo entre ellos.

 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("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()); } } } 

prueba esto

  Intent i = new Intent(Intent.ACTION_SEND); i.setType("text/plain"); i.putExtra(Intent.EXTRA_EMAIL , new String[]{"[email protected]"}); 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...")); 
  • Android ImageView cómo adaptarse a la parte inferior izquierda, como setScaleType (ScaleType.FIT_END) ;, pero no se ajusta a la parte inferior derecha
  • combinando dos archivos png en android
  • Android: cómo crear un botón con imagen y texto que están centrados
  • Manera correcta de compartir una imagen (usando Intents)
  • Android Cómo obtener una vista previa de una imagen, utilizando su ruta de acceso desde SDcard, desde mi aplicación
  • ¿Cómo puedo hacer la imagen opaca a algún nivel?
  • ¿Cómo puedo modificar TouchImageView con doble toque para acercar y alejar?
  • Redimensionamiento de mapa de bits en Android con interpolación bicúbica
  • Tamaño de imagen dinámico para android
  • Android Cambiar imagen cada 10 segundos
  • Añadir sombras en la parte inferior de la imagen
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.