androidandroid-intentandroid-intent-chooser

Intent image share-file format not supported


I'm unable to share the image on social media when I clicked on the share button. It showed the Toast

File format not supported

public void onBindViewHolder(final ViewHolder holder, int position) {
         upload = uploads.get(position);

       holder.textViewName.setText(upload.getName());
       final String imageUrl=upload.getUrl();


        Glide.with(context).load(imageUrl).into(holder.imageView);
        
        final Uri imageUri=Uri.parse("https://firebasestorage.googleapis.com/v0/b/memories-project.appspot.com/o/uploads%2FnCfBZThQykf3Ur9oNzHyEHS1DEp2%2F45007?alt=media&token=9ae17594-13ff-40f6-98f9-aff80ab2fdf4");
        holder.shareImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(context,imageUrl,Toast.LENGTH_SHORT).show();
                Intent shareIntent = new Intent();
                shareIntent.setAction(Intent.ACTION_SEND);
                shareIntent.setType("image/*");

                shareIntent.putExtra(Intent.EXTRA_STREAM,imageUri);
           
                shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                try {
                    context.startActivity(Intent.createChooser(shareIntent, "Share image File"));
                } catch (android.content.ActivityNotFoundException ex) {

                }
            }
        });
    }

I stored images to firebase. Now I get the link from firebase and parse into URI but I don't know why this is showing.

I hardcoded the URL just for testing purposes.

For WhatsApp:

File Format not supported

For Instagram:

Image Unable to load

For Facebook :

Showed nothing means no Toast or anything(Just Showed the status bar)

For Messenger:

Not opened


Solution

  • Quoting the documentation, EXTRA_STREAM is supposed to point to "A content: URI holding a stream of data associated with the Intent, used with ACTION_SEND to supply the data being sent."

    You are supplying an https Uri, and other apps will not be expecting it. Not every possible app that supports ACTION_SEND will have the INTERNET permission, anyway.

    If you want to share some content, typically it needs to be local on the device and shared via a FileProvider or some other form of ContentProvider. Prior to Android 7.0, a file scheme pointing to a file on external storage often works as well.