Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to share image URL to WhatsApp in Android?

I need to share an image to WhatsApp in my app. I have the image URL. For sharing to WhatsApp, I am using the following code.

String image_url = "http://images.cartradeexchange.com//img//800//vehicle//Honda_Brio_562672_5995_6_1438153637072.jpg";

URI uri = null;
try {
    uri = new URI(image_url.toString());
} catch (URISyntaxException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
Log.e("uri=", "" + uri);
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
shareIntent.setType("image/jpg");

// Target whatsapp:
shareIntent.setPackage("com.whatsapp");
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

try {
    startActivity(shareIntent);
} catch (android.content.ActivityNotFoundException ex) {
    Toast.makeText(InventoryManageOnlineActivity.this,
            "Whatsapp have not been installed.",
            Toast.LENGTH_SHORT).show();
}

But it didn't work. I am getting the following error.

08-26 11:57:34.674: W/Bundle(19447): Key android.intent.extra.STREAM expected Parcelable but value was a java.net.URI.  The default value <null> was returned.
08-26 11:57:34.738: W/Bundle(19447): Attempt to cast generated internal exception:
08-26 11:57:34.738: W/Bundle(19447): java.lang.ClassCastException: java.net.URI cannot be cast to android.os.Parcelable
08-26 11:57:34.738: W/Bundle(19447):    at android.os.Bundle.getParcelable(Bundle.java:810)
08-26 11:57:34.738: W/Bundle(19447):    at android.content.Intent.getParcelableExtra(Intent.java:4850)
08-26 11:57:34.738: W/Bundle(19447):    at android.content.Intent.migrateExtraStreamToClipData(Intent.java:7548)
08-26 11:57:34.738: W/Bundle(19447):    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1545)
08-26 11:57:34.738: W/Bundle(19447):    at android.app.Activity.startActivityForResult(Activity.java:3746)
08-26 11:57:34.738: W/Bundle(19447):    at android.app.Activity.startActivityForResult(Activity.java:3707)
08-26 11:57:34.738: W/Bundle(19447):    at android.app.Activity.startActivity(Activity.java:4027)
08-26 11:57:34.738: W/Bundle(19447):    at android.app.Activity.startActivity(Activity.java:3989)
08-26 11:57:34.738: W/Bundle(19447):    at com.cartradrexchange.inventory.InventoryManageOnlineActivity$ManageOnlineAdapter.onClick(InventoryManageOnlineActivity.java:441)
08-26 11:57:34.738: W/Bundle(19447):    at android.view.View.performClick(View.java:4761)
08-26 11:57:34.738: W/Bundle(19447):    at android.view.View$PerformClick.run(View.java:19767)
08-26 11:57:34.738: W/Bundle(19447):    at android.os.Handler.handleCallback(Handler.java:739)
08-26 11:57:34.738: W/Bundle(19447):    at android.os.Handler.dispatchMessage(Handler.java:95)
08-26 11:57:34.738: W/Bundle(19447):    at android.os.Looper.loop(Looper.java:135)
08-26 11:57:34.738: W/Bundle(19447):    at android.app.ActivityThread.main(ActivityThread.java:5312)
08-26 11:57:34.738: W/Bundle(19447):    at java.lang.reflect.Method.invoke(Native Method)
08-26 11:57:34.738: W/Bundle(19447):    at java.lang.reflect.Method.invoke(Method.java:372)
08-26 11:57:34.738: W/Bundle(19447):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
08-26 11:57:34.738: W/Bundle(19447):    at com.android.internal.os.ZygoteInit.main(Zygote

For that, I searched a lot in Google, and I followed the below URL

Android sharing image doesn't work.

But it is not useful for me. Please show me how to share image URLs.

like image 634
rams Avatar asked Oct 25 '25 06:10

rams


2 Answers

CheckOut this answer

How to share an image on whats app which is set on an ImageView in android.

BTW i dont get it why are you doing image_url.toString() ? It is already in string right ?

And try this code also.

String image_url = "http://images.cartradeexchange.com//img//800//vehicle//Honda_Brio_562672_5995_6_1438153637072.jpg";

        Intent shareIntent = new Intent();
        shareIntent.setType("image/*");
        shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        shareIntent.setAction(Intent.ACTION_SEND);
        //without the below line intent will show error
        shareIntent.setType("text/plain");
        shareIntent.putExtra(Intent.EXTRA_TEXT, image_url);
                // Target whatsapp:
        shareIntent.setPackage("com.whatsapp");
        shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

                try {
                    startActivity(shareIntent);
                } catch (android.content.ActivityNotFoundException ex) {
                    Toast.makeText(InventoryManageOnlineActivity.this,
                            "Whatsapp have not been installed.",
                            Toast.LENGTH_SHORT).show();
                }
like image 169
penta Avatar answered Oct 26 '25 19:10

penta


First you need to load image in glide then you can share it to anywhere.

Code to load image from glide (image is being saved to storage, you can delete it later)

Glide.with(getApplicationContext())
                    .load(imagelink)   \\link of your image file (url)
                    .asBitmap().skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.NONE)
                    .into(new SimpleTarget<Bitmap>(250, 250) {@Override
                     public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {


                    Intent intent = new Intent(Intent.ACTION_SEND);
                    intent.putExtra(Intent.EXTRA_TEXT, "Hey view/download this image");
                    String path = MediaStore.Images.Media.insertImage(getContentResolver(), resource, "", null);
                    Log.i("quoteswahttodo", "is onresoursereddy" + path);
                    Uri screenshotUri = Uri.parse(path);
                    Log.i("quoteswahttodo", "is onresoursereddy" + screenshotUri);
                    intent.putExtra(Intent.EXTRA_STREAM, screenshotUri);
                    intent.setType("image/*");
                    startActivity(Intent.createChooser(intent, "Share image via..."));  // if you want to share with whatsapp only replace with below code 
                }
                @Override public void onLoadFailed(Exception e, Drawable errorDrawable) {
                            Toast.makeText(getApplicationContext(), "Something went wrong", Toast.LENGTH_SHORT).show();


                            super.onLoadFailed(e, errorDrawable);
                        }

                @Override public void onLoadStarted(Drawable placeholder) {
                            Toast.makeText(getApplicationContext(), "Starting", Toast.LENGTH_SHORT).show();
                            super.onLoadStarted(placeholder);
               }
});

Here replace for Whatsapp:

 sendd.setPackage("com.whatsapp");
 try {
         startActivity(sendd);
 } catch (Exception e) {
         Toast.makeText(FinishedDoing.this, "It seem like Whatsapp is not been installed", Toast.LENGTH_SHORT).show();
                e.printStackTrace();
 }  
like image 20
ashad Avatar answered Oct 26 '25 20:10

ashad