Repository navigation
[@capacitor/share] Android: sharing several images with text to WhatsApp only sends the text (intent type forced to */*) #2605
Description
Bug Report
Plugin(s)
@capacitor/share 8.0.2
Capacitor Version
Latest Dependencies:
@capacitor/cli: 8.5.2
@capacitor/core: 8.5.2
@capacitor/android: 8.5.2
@capacitor/ios: 8.5.2
Installed Dependencies:
@capacitor/ios: not installed
@capacitor/cli: 8.5.2
@capacitor/core: 8.5.2
@capacitor/android: 8.5.2
Platform(s)
Android
Current Behavior
Sharing several image files together with a text to WhatsApp only delivers the text: WhatsApp drops all the images. Sharing a single image with the same text works.
In SharePlugin.shareFiles, the intent type is forced to */* as soon as more than one file is shared, even when every file has a known MIME type:
String type = getMimeType(file);
if (type == null || filesList.size() > 1) {
type = "*/*";
}
intent.setType(type);With three JPEG files, the ACTION_SEND_MULTIPLE intent is sent as */*, and WhatsApp treats it as a text-only share.
We confirmed it on a physical Android phone. Our logs showed the three files written to the cache and passed to Share.share, the plugin resolving with activityType: com.whatsapp, and still only the text reaching the conversation.
Expected Behavior
The intent should carry the common MIME type of the shared files, as Chrome's Web Share does: image/jpeg when all files are JPEG, image/* when they are mixed image types, and */* only when the types differ or are unknown. WhatsApp then receives all the images with the text.
Code Reproduction
import { Directory, Filesystem } from '@capacitor/filesystem'
import { Share } from '@capacitor/share'
// three small JPEGs written to the cache
const uris = []
for (const name of ['a.jpg', 'b.jpg', 'c.jpg']) {
const { uri } = await Filesystem.writeFile({ path: `share/${name}`, data: JPEG_BASE64, directory: Directory.Cache, recursive: true })
uris.push(uri)
}
await Share.share({ text: 'Three photos', files: uris })
// choose WhatsApp → only "Three photos" is sent
// with files: [uris[0]] → the photo and the text are sentOther Technical Details
The following change fixes it for us. We apply it with patch-package, and three images plus the text now reach WhatsApp:
- String type = getMimeType(file);
- if (type == null || filesList.size() > 1) {
- type = "*/*";
- }
- intent.setType(type);
+ String type = getMimeType(file);
+ if (type == null) {
+ sharedType = "*/*";
+ } else if (sharedType == null) {
+ sharedType = type;
+ } else if (!sharedType.equals(type)) {
+ boolean bothImages = sharedType.startsWith("image/") && type.startsWith("image/");
+ sharedType = bothImages ? "image/*" : "*/*";
+ }
+ intent.setType(sharedType);(sharedType is a String declared as null before the loop.)
We also set a ClipData covering every URI for ACTION_SEND_MULTIPLE, since the plugin currently only does it for a single file. That was not enough on its own: the MIME type was the deciding factor.
if (fileUris.size() > 1) {
ClipData clipData = ClipData.newRawUri("", fileUris.get(0));
for (int i = 1; i < fileUris.size(); i++) {
clipData.addItem(new ClipData.Item(fileUris.get(i)));
}
intent.setClipData(clipData);
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, fileUris);
}Related: #2474 (unknown extensions also fall back to */*, which WhatsApp likewise discards).
Activity
HarelM commentedon Oct 27, 2026
I added a comment in a similar (I believe) issue: