3

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.

Community
  • 1
  • 1
rams
  • 1,558
  • 7
  • 25
  • 48

6 Answers6

1

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();
                }
Srinivas Nahak
  • 1,846
  • 4
  • 20
  • 45
penta
  • 2,536
  • 4
  • 25
  • 50
  • Hi penta, sharing message is working fine. but image url is not working..if u have worked on that please share that image sharing code – rams Aug 26 '15 at 07:08
  • would you like to directly share the image instead of sharing the url of the image ? – penta Aug 26 '15 at 07:09
  • check now, use the code directly ffrom the answer, if that does not work, go to the link – penta Aug 26 '15 at 07:22
  • sorry, i had used uri in the answer, i removed it, use the code now – penta Aug 26 '15 at 07:26
  • hi..i need to share image through whatsapp, for that i have image url – rams Aug 26 '15 at 07:38
  • Let us [continue this discussion in chat](http://chat.stackoverflow.com/rooms/87956/discussion-between-venkat-and-penta). – rams Aug 26 '15 at 07:42
  • code is not working for me i got this sharing faild try again later. – nirav kalola Mar 31 '17 at 06:22
  • @penta Is it possible to send a file from its http url (ie, remote file) to whatsapp or any sharable media ?? – KJEjava48 Feb 01 '22 at 05:05
1

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();
 }  
Unheilig
  • 16,196
  • 193
  • 68
  • 98
ashad
  • 351
  • 4
  • 13
0

Try to change this line

sharingIntent.putExtra(android.content.Intent.EXTRA_STREAM, url);

by this one

sharingIntent.putExtra(android.content.Intent.EXTRA_STREAM, Uri.fromFile(image_url )); 
// Use direct image url instead of uri

let me know if its working for you.

Lavekush Agrawal
  • 6,040
  • 7
  • 52
  • 85
  • Hi lavekush, in that line Uri.fromFile() method taking file not image url – rams Aug 26 '15 at 06:58
  • am not copy from yours ..am refer this http://stackoverflow.com/questions/19306417/android-sharing-image-doesnt-work ....but you post faster ...anyway am remove my answer – sasikumar Aug 26 '15 at 07:00
0

By using this you can text and url on whatsapp.

sendIntent.setPackage("com.whatsapp");

is only use share message on whatsapp where you can choose contacts to whom you want to share.

Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "http://images.cartradeexchange.com//img//800//vehicle//Honda_Brio_562672_5995_6_1438153637072.jpg");
 sendIntent.setType("text/plain");
 sendIntent.setPackage("com.whatsapp");
 startActivity(sendIntent);

Add internet permission in manifest also

<uses-permission android:name="android.permission.INTERNET" />
Deepak Gupta
  • 979
  • 1
  • 10
  • 18
0

Use Below code:-

   whatsapp.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent1 = c.getPackageManager().getLaunchIntentForPackage("com.whatsapp");
                    if(intent1!=null)
                    {
                        Intent whatsappIntent = new Intent(Intent.ACTION_SEND);
                        whatsappIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        whatsappIntent.setType("image/*");
                        whatsappIntent.setPackage("com.whatsapp");
                        String url = Spacecraft.new_image_array.get(position);
                        new Download_GIF(url).execute();
                        Uri imageUri = Uri.parse("file:///storage/emulated/0/downloadedFile.gif");
                        whatsappIntent.putExtra(Intent.EXTRA_STREAM, imageUri);
                        c.startActivity(whatsappIntent);
                    }

Download_GIF Class.

public class Download_GIF extends AsyncTask<String, Void, String> {
    static String url_image=null;

    public Download_GIF(String url) {
        this.url_image = url;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(String... params) {

        String filepath = null;
        try {
            //set the download URL, a url that points to a file on the internet
            //this is the file to be downloaded
            URL url = new URL(url_image);
            //create the new connection
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

            //set up some things on the connection
            urlConnection.setRequestMethod("GET");
            urlConnection.setDoOutput(true);
            //and connect!
            urlConnection.connect();
            //set the path where we want to save the file
            //in this case, going to save it on the root directory of the
            //sd card.
            File SDCardRoot = Environment.getExternalStorageDirectory();
            //create a new file, specifying the path, and the filename
            //which we want to save the file as.

            String filename = "downloadedFile.gif";   // you can download to any type of file ex:.jpeg (image) ,.txt(text file),.mp3 (audio file)
            Log.i("Local filename:", "" + filename);
            File file;
            file = new File(SDCardRoot, filename);
            if (file.createNewFile()) {
                file.createNewFile();
            }

            //this will be used to write the downloaded data into the file we created
            FileOutputStream fileOutput = new FileOutputStream(file);

            //this will be used in reading the data from the internet
            InputStream inputStream = urlConnection.getInputStream();

            //this is the total size of the file
            int totalSize = urlConnection.getContentLength();
            //variable to store total downloaded bytes
            int downloadedSize = 0;

            //create a buffer...
            byte[] buffer = new byte[1024];
            int bufferLength = 0; //used to store a temporary size of the buffer

            //now, read through the input buffer and write the contents to the file
            while ((bufferLength = inputStream.read(buffer)) > 0) {
                //add the data in the buffer to the file in the file output stream (the file on the sd card
                fileOutput.write(buffer, 0, bufferLength);
                //add up the size so we know how much is downloaded
                downloadedSize += bufferLength;
                //this is where you would do something to report the prgress, like this maybe
                Log.i("Progress:", "downloadedSize:" + downloadedSize + "totalSize:" + totalSize);

            }
            //close the output stream when done
            fileOutput.close();
            if (downloadedSize == totalSize) filepath = file.getPath();

            //catch some possible errors...
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            filepath = null;
            e.printStackTrace();
        }
        Log.i("filepath:", " " + filepath);

        return filepath;


    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
    }
}
Vinesh Chauhan
  • 1,288
  • 11
  • 27
  • 1
    Please dont write code only. Provide the explanation also. See on how to [answer](https://stackoverflow.com/help/how-to-answer). – Sumanth Shastry Aug 08 '17 at 11:22
  • @Vinesh Chauhan Is it possible to send a file from its http url (ie, remote file) to whatsapp or any sharable media ?? – KJEjava48 Feb 01 '22 at 05:01
  • @KJEjava48 actually if you share URL to whatsapp instent it will share as URL only, if you wish to Send Remote file to Whatapp intent you have to download file first – Vinesh Chauhan Feb 01 '22 at 12:32
0

If the image is in your application's data area you might need to implement a FileProvider. See here: https://developer.android.com/reference/androidx/core/content/FileProvider

Shoom Kloom
  • 177
  • 2
  • 8