2011-09-29 6 views
6

Obecnie próbuję utworzyć aplikację, która zrobi zdjęcie, a następnie dołączę to zdjęcie do wiadomości e-mail, która przejdzie do wstępnie określonego adresu e-mail.Android: Jak wysłać obraz jako załącznik wiadomości e-mail z aplikacji?

Mam działającą pocztę i mam działającą kamerę. Nie mogę uzyskać obrazu, który kamera zrobiła jako załącznik. Mam obraz wyskakujący w aplikacji jako rodzaj podglądu obrazu, którego nie mam problemu z usunięciem, jeśli to jest powód, dla którego to nie przyłączy.

Po wysłaniu wiadomości e-mail zdjęcie zostało utworzone, ale jest uszkodzone i nie zostaje otwarte. To tak, jakbym tworzył nieistniejący obraz. Myślę, że będzie to wiązało się z zawiązaniem zdjęcia do tworzenia części do załącznika, ale nie mam pojęcia! Gdyby ktokolwiek mógł mi pomóc, byłbym bardzo wdzięczny!

Oto mój MainActivity gdzie e-mail jest tworzony wraz z aparatem:

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

Mam nadzieję, że jej coś proste, że po prostu nie jestem łączący je ze sobą.

Odpowiedz

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

Właśnie spróbowałem i pracował dla mnie, mam nadzieję, że to pomaga! Proszę zaakceptuj, jeśli to zrobi :) – Beast

+0

Dziękujemy! Działa idealnie! – PaulH

+0

Właśnie coś odkryłem. Nie wyślesz e-maila bez zrobienia zdjęcia. Czy jest tam, aby nadal wysyłać wiadomość e-mail, jeśli zdjęcie nie zostało zrobione? – PaulH

0

spróbować

 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...")); 
Powiązane problemy