Hello friends, Today i am going to share email with attachment in android pro-grammatically.
Here is the code for attached single image from gallery and camera.
OUT PUT :
1. Attached image with Email:
2.Attached Multiple images/PDF with Email:
Here is the method for attached multiple images with mail using Uri.
-Here is the method which get all image path from directory
Now this is the way to manage whole this,
3.Attached SelectMultiFiles images with Email:
here is the example for add selection file from gallery and attached with Mail.
Here is the code for attached single image from gallery and camera.
OUT PUT :
1. Attached image with Email:
final int RQS_GALARRY = 0;
final int RQS_CAMERA = 2;
Uri imageUri = null;
Bitmap bmp;
ImageView YD_image;
btnGal.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Intent intent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, RQS_GALARRY);
}
});
btnCamera.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
String fileName = "temp.png";
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, fileName);
imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, RQS_CAMERA);
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK)
{
switch(requestCode)
{
case RQS_GALARRY:
try
{
System.gc();
imageUri = data.getData();
String selectedImagePath = getPath(imageUri);
if(bmp != null && !bmp.isRecycled())
{
bmp = null;
((BitmapDrawable)YD_image.getDrawable()).getBitmap().recycle();
}
bmp = BitmapFactory.decodeFile(selectedImagePath);
YD_image.setBackgroundResource(0);
YD_image.setImageBitmap(bmp);
mpopup.dismiss();
dialog_message("Prescription uploaded");
}
catch (Exception e)
{
e.printStackTrace();
}
break;
case RQS_CAMERA:
try
{
if(bmp != null && !bmp.isRecycled())
{
bmp = null;
}
bmp = (Bitmap) data.getExtras().get("data");
YD_image.setImageBitmap(bmp);
mpopup.dismiss();
dialog_message("Prescription uploaded");
}
catch (Exception e)
{
e.printStackTrace();
}
break;
}
}
}
public String getPath(Uri uri)
{
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
private void SendMail()
{
String body ="Hasmukh Bhadani":
final Intent emailIntent = newIntent(android.content.Intent.ACTION_SEND);
emailIntent.putExtra(Intent.EXTRA_EMAIL,new String[]{Toemail});
emailIntent.setType("text/html");
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Subject");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, Html.fromHtml(body));
try
{
if(imageUri != null)
{
emailIntent.putExtra(Intent.EXTRA_STREAM, imageUri);
emailIntent.setType("image/png");
}
else
{
emailIntent.setType("plain/text");
}
startActivity(Intent.createChooser(emailIntent,"Send Mail........"));
}
catch (android.content.ActivityNotFoundException ex)
{
Toast.makeText(Act_YourDetails.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
}
}
2.Attached Multiple images/PDF with Email:
Here is the method for attached multiple images with mail using Uri.
public void SendEmail(Context context, String emailTo, String subject, String body, List<String> filePaths)
{
final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND_MULTIPLE);
emailIntent.setType("text/html");
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{emailTo});
//emailIntent.putExtra(android.content.Intent.EXTRA_CC,new String[]{emailCC});
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(Intent.EXTRA_TEXT,Html.fromHtml(body));
emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
emailIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
ArrayList<Uri> uris = new ArrayList<Uri>();
for (String file : filePaths)
{
File fileIn = new File(file);
Uri u = Uri.fromFile(fileIn);
uris.add(u);
}
emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
context.startActivity(Intent.createChooser(emailIntent, "Send mail..."));
}
-Here is the method which get all image path from directory
public ArrayList<String> GetImagesPath(String dir)
{
ArrayList<String> f = new ArrayList<String>();// list of file paths
File[] listFile;
try
{
File file= new File(dir);
if (file.isDirectory())
{
listFile = file.listFiles();
for (int i = 0; i < listFile.length; i++)
{
f.add(listFile[i].getAbsolutePath());
}
}
} catch (Exception e)
{
e.printStackTrace();
}
return f;
}
Now this is the way to manage whole this,
public static String Directory = Environment.getExternalStorageDirectory() + "/HB/Images/"; String EmailTo="hb@gmail.com"; String Subject=Hello; String body="This is Android testing mail" ; ArrayList<String> arry_imagesPath =application.GetImagesPath(Directory);
here is the example for add selection file from gallery and attached with Mail.
import java.util.ArrayList;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
public class MainActivity extends Activity
{
EditText edittextEmailAddress;
EditText edittextEmailSubject;
EditText edittextEmailText;
Button btnAddFile, btnSend;
ListView listViewFiles;
ArrayList<Uri> arrayUri = new ArrayList<Uri>();
ArrayAdapter<Uri> myFileListAdapter;
final int RQS_LOADIMAGE = 0;
final int RQS_SENDEMAIL = 1;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edittextEmailAddress = (EditText)findViewById(R.id.email_address);
edittextEmailSubject = (EditText)findViewById(R.id.email_subject);
edittextEmailText = (EditText)findViewById(R.id.email_text);
btnAddFile = (Button)findViewById(R.id.addphoto);
btnSend = (Button)findViewById(R.id.send);
btnAddFile.setOnClickListener(btnAddFileOnClickListener);
btnSend.setOnClickListener(btnSendOnClickListener);
myFileListAdapter = new ArrayAdapter<Uri>(MainActivity.this,
android.R.layout.simple_list_item_1,arrayUri);
listViewFiles = (ListView)findViewById(R.id.filelist);
listViewFiles.setAdapter(myFileListAdapter);
}
OnClickListener btnAddFileOnClickListener = new OnClickListener()
{
@Override
public void onClick(View v)
{
Intent intent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, RQS_LOADIMAGE);
}};
OnClickListener btnSendOnClickListener = new OnClickListener()
{
@Override
public void onClick(View v)
{
String emailAddress = edittextEmailAddress.getText().toString();
String emailSubject = edittextEmailSubject.getText().toString();
String emailText = edittextEmailText.getText().toString();
String emailAddressList[] = {emailAddress};
Intent intent = new Intent();
intent.putExtra(Intent.EXTRA_EMAIL, emailAddressList);
intent.putExtra(Intent.EXTRA_SUBJECT, emailSubject);
intent.putExtra(Intent.EXTRA_TEXT, emailText);
if(arrayUri.isEmpty())
{
//Send email without photo attached
intent.setAction(Intent.ACTION_SEND);
intent.setType("plain/text");
}
else if(arrayUri.size() == 1)
{
//Send email with ONE photo attached
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_STREAM, arrayUri.get(0));
intent.setType("image/*");
}
else
{
//Send email with MULTI photo attached
intent.setAction(Intent.ACTION_SEND_MULTIPLE);
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, arrayUri);
intent.setType("image/*");
}
startActivity(Intent.createChooser(intent, "Choice App to send email:"));
}};
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK)
{
switch(requestCode)
{
case RQS_LOADIMAGE:
Uri imageUri = data.getData();
arrayUri.add(imageUri);
myFileListAdapter.notifyDataSetChanged();
break;
case RQS_SENDEMAIL:
break;
}
}
}
}

Do you have the link to download the complete source code?
ReplyDelete