My app generates images that a user can save or share with others. The code below works for most apps: Messenger, Facebook, Dropbox, email, etc. Meaning, the image is load
The reason why you are getting this error is because of "on the sd card" is NOT "on your device".
A discussion about this issue can be found here: https://groups.google.com/a/googleproductforums.com/forum/#!topic/google-plus-discuss/pdlOTM8JEXg/discussion
The workaround via the MediaStore seems to be the only solution until Google updates the Google+ app with a fix.
Update: The solution mentioned above only works if you want to share an image a single time. If you call ContentResolver.insert(...) multiple times, you will end up with the image showing up multiple times in your gallery. I came up with the following solution that tries to get the existing id of the image and if it doesn't exist, you can insert it...
Cursor c = getActivity().getContentResolver()
.query(Images.Media.EXTERNAL_CONTENT_URI,
null,
Images.Media.DATA + "=?",
new String[] { filePath }, null);
if (c.getCount() > 0 && c.moveToFirst()) {
Uri shareUri = Uri.withAppendedPath(
Images.Media.EXTERNAL_CONTENT_URI,
""
+ c.getInt(c
.getColumnIndex(Images.Media._ID)));
c.close();
startActivity(Intent.createChooser(
new Intent(Intent.ACTION_SEND)
.putExtra(Intent.EXTRA_STREAM,
shareUri).setType(
"image/*"), ""));
} else {
// ContentResolver.insert(...) and use that uri...
}