Question

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)
Was it helpful?

Solution

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" />

OTHER TIPS

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

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top