Image Share Intent funktioniert für Google Mail, stürzt jedoch FB und Twitter ab

Ich versuche, dem Benutzer zu ermöglichen, ein Bild für andere Apps auf dem Gerät freizugeben. Das Bild befindet sich in den Dateien / im Unterverzeichnis des internen Speicherbereichs meiner App. Es funktioniert gut mit Google Mail, aber Facebook und Twitter stürzen beide ab, wenn ich auf meine Absicht reagiere.

BEARBEITEN: Google+ funktioniert auch gut.

Hier sind die relevanten Codeabschnitte.

In Application.xml

<provider 
    android:name="android.support.v4.content.FileProvider"
    android:authorities="org.iforce2d.myapp.MyActivity"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/filepaths" />
</provider>

xml / filepaths.xml

<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <files-path name="shared" path="shared"/>
</paths>

Hier ist der Freigabecode für meine Aktivität:

File imagePath = new File(getContext().getFilesDir(), "shared");
File newFile = new File(imagePath, "snapshot.jpg");
Uri contentUri = FileProvider.getUriForFile(getContext(),
                     "org.iforce2d.myapp.MyActivity", newFile);    

Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.setType("image/jpeg");
shareIntent.putExtra(Intent.EXTRA_STREAM, contentUri);
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

List<ResolveInfo> resInfos = 
    getPackageManager().queryIntentActivities(shareIntent,
                                              PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo info : resInfos) {
    getContext().grantUriPermission(info.activityInfo.packageName, 
                                    contentUri,
                                    Intent.FLAG_GRANT_READ_URI_PERMISSION);
}

startActivity(Intent.createChooser(shareIntent, "Share image..."));

Der Wert voncontentUri wenn angemeldet ist:

content://org.iforce2d.myapp.MyActivity/shared/snapshot.jpg

Ich habe dies nur mit Google Mail, Facebook und Twitter als empfangende Apps überprüft, aber die Ergebnisse waren über eine Vielzahl von Betriebssystemversionen (von 2.2.1 bis 4.4.3) hinweg sehr konsistent, und auf 7 Geräten ist ein Kindle installiert.

Google Mail funktioniert hervorragend. Das Miniaturbild wird in der E-Mail-Komposition angezeigt und beim Senden erfolgreich an die E-Mail angehängt.

Twitter und Facebook stürzen wie unten beschrieben ab.

Hier sind die Stack-Traces von logcat, die das Problem dieser beiden Apps aufzeigen. Es scheint für beide dasselbe Problem zu sein (dies stammt aus 4.4.3, aber die Fehler waren bis 2.2 praktisch gleich. 1 (allerdings mit leicht abweichendem Wortlaut der Fehlermeldung):

Caused by: 
  java.lang.IllegalStateException: Couldn't read row 0, col 0 from CursorWindow. 
  Make sure the Cursor is initialized correctly before accessing data from it.
    at android.database.CursorWindow.nativeGetString(Native Method)
    at android.database.CursorWindow.getString(CursorWindow.java:434)
    at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
    at android.database.CursorWrapper.getString(CursorWrapper.java:114)
    at com.twitter.library.media.util.f.a(Twttr:95)
    ...

Caused by: 
  java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.
  Make sure the Cursor is initialized correctly before accessing data from it.
    at android.database.CursorWindow.nativeGetString(Native Method)
    at android.database.CursorWindow.getString(CursorWindow.java:434)
    at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
    at android.database.CursorWrapper.getString(CursorWrapper.java:114)
    at com.facebook.photos.base.media.MediaItemFactory.b(MediaItemFactory.java:233)
    ...

Angesichts der Tatsache, dass Millionen von Menschen den ganzen Tag über Bilder auf Facebook und Twitter teilen, bin ich ziemlich schockiert, dass die Implementierung so schwierig ist: /

Kann jemand etwas erkennen, was ich hier falsch mache?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage