It is not clear from the question whether you want to send several images or just one image, but with the corresponding text.
In the first case (several images):
Use ACTION_SEND_MULTIPLE and specify the uris list as EXTRA_STREAM , as in:
Intent shareIntent = new Intent(Intent.ACTION_SEND_MULTIPLE); shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris); shareIntent.setType("image/*");
If this is the second case (image plus text):
Use only ACTION_SEND and specify both EXTRA_STREAM and EXTRA_TEXT , for example:
Intent shareIntent = new Intent(Intent.ACTION_SEND); shareIntent.putExtra(Intent.EXTRA_TEXT, text); shareIntent.putExtra(Intent.EXTRA_STREAM, imageUri); shareIntent.setType("image/*");
If, however, you need to exchange streams of different MIME types (for example, wallpapers and other attachments), just use the more general MIME type, for example */* . For instance:
shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); shareIntent.setType("*
From the ACTION_SEND_MULTIPLE documentation (my attention):
Several types are supported, and receivers should handle mixed types as soon as possible. The correct way for the recipient to check them is to use a content resolver for each URI. The sender of the intent should try to put the most specific type of mime in the type of intent, but it may drop back to <type>/* or */* as necessary.
eg. if you send image/jpg and image/jpg , the type of intent may be image/jpg , but if you send image/jpg and image/png , then the type of intent should be image/* .
This works when mixing, say, images and uploaded files.