Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sending mail via Implicit Intent using Gmail with an Image as an attachment in Android?

Its simple but creating problem in my application. I am sending email using Implicit Intent, having an IMAGE attached as an ATTACHMENT. But creating problem with the below code.

File file = new File(path);
Intent emailIntent = new Intent(Intent.ACTION_SEND); 
emailIntent.setType("vnd.android.cursor.dir/email");
emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{""}); 
emailIntent.putExtra(Intent.EXTRA_SUBJECT,"Wedding App"); 
emailIntent.putExtra(Intent.EXTRA_TEXT, "Sharing image via email."); 
emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(file.toString()));
startActivity(Intent.createChooser(emailIntent, "Send mail..."));

Creating crash :

02-22 12:20:47.561: E/ActivityThread(6317): Activity com.android.internal.app.ChooserActivity has leaked IntentReceiver com.android.internal.app.ResolverActivity$1@417c1fc8 that was originally registered here. Are you missing a call to unregisterReceiver()?
02-22 12:20:47.561: E/ActivityThread(6317): android.app.IntentReceiverLeaked: Activity com.android.internal.app.ChooserActivity has leaked IntentReceiver com.android.internal.app.ResolverActivity$1@417c1fc8 that was originally registered here. Are you missing a call to unregisterReceiver()?
02-22 12:20:47.561: E/ActivityThread(6317):     at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:763)
02-22 12:20:47.561: E/ActivityThread(6317):     at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:567)
02-22 12:20:47.561: E/ActivityThread(6317):     at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1066)
02-22 12:20:47.561: E/ActivityThread(6317):     at android.app.ContextImpl.registerReceiver(ContextImpl.java:1053)
02-22 12:20:47.561: E/ActivityThread(6317):     at android.app.ContextImpl.registerReceiver(ContextImpl.java:1047)
02-22 12:20:47.561: E/ActivityThread(6317):     at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:341)
02-22 12:20:47.561: E/ActivityThread(6317):     at com.android.internal.content.PackageMonitor.register(PackageMonitor.java:65)
02-22 12:20:47.561: E/ActivityThread(6317):     at com.android.internal.app.ResolverActivity.onCreate(ResolverActivity.java:99)
02-22 12:20:47.561: E/ActivityThread(6317):     at com.android.internal.app.ChooserActivity.onCreate(ChooserActivity.java:53)
02-22 12:20:47.561: E/ActivityThread(6317):     at android.app.Activity.performCreate(Activity.java:4470)
02-22 12:20:47.561: E/ActivityThread(6317):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
02-22 12:20:47.561: E/ActivityThread(6317):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
02-22 12:20:47.561: E/ActivityThread(6317):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
02-22 12:20:47.561: E/ActivityThread(6317):     at android.app.ActivityThread.access$600(ActivityThread.java:123)
02-22 12:20:47.561: E/ActivityThread(6317):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
02-22 12:20:47.561: E/ActivityThread(6317):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-22 12:20:47.561: E/ActivityThread(6317):     at android.os.Looper.loop(Looper.java:137)
02-22 12:20:47.561: E/ActivityThread(6317):     at android.app.ActivityThread.main(ActivityThread.java:4424)
02-22 12:20:47.561: E/ActivityThread(6317):     at java.lang.reflect.Method.invokeNative(Native Method)
02-22 12:20:47.561: E/ActivityThread(6317):     at java.lang.reflect.Method.invoke(Method.java:511)
02-22 12:20:47.561: E/ActivityThread(6317):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:817)
02-22 12:20:47.561: E/ActivityThread(6317):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
02-22 12:20:47.561: E/ActivityThread(6317):     at dalvik.system.NativeStart.main(Native Method)
like image 319
Sam-In-TechValens Avatar asked Sep 20 '25 14:09

Sam-In-TechValens


2 Answers

Try below code.

Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setType("png/image");
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] {
                "mail--id" });
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, message);
Uri uri = Uri.fromFile(new File(Environment
                .getExternalStorageDirectory(), "/saved_images/MyImage.png"));
emailIntent.putExtra(Intent.EXTRA_STREAM, uri);
emailIntent.setType("text/plain");
startActivity(emailIntent);

and don't forget to add this below permission in manifest file.

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
like image 83
InnocentKiller Avatar answered Sep 22 '25 04:09

InnocentKiller


Try with this:

Bitmap b =BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("image/jpeg");
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
String path = MediaStore.Images.Media.insertImage(getContentResolver(), b, "Title", null);
Uri imageUri = Uri.parse(path);
share.putExtra(Intent.EXTRA_STREAM, imageUri);
startActivity(Intent.createChooser(share, "Select"));

You can download full Source Code from here

like image 24
Deepshikha Puri Avatar answered Sep 22 '25 04:09

Deepshikha Puri