it-swarm.com.de

Android Eine Datei an GMAIL anhängen - Leere Datei kann nicht angefügt werden

Ich hatte ein Programm, das immer dieselbe Datei an GMAIL anhängt (Erstellen> Anhängen> Öffnen von> "MeinProgramm"). Es würde immer dieselbe Datei auswählen.

Was es tat, war:

String path = Environment.getExternalStorageDirectory() + "/file.3gp";
File f = new File(path);
Uri data = Uri.fromFile(f);
Intent i = new Intent();
i.setData(data);
setResult(Activity.RESULT_OK, i);
finish();

Dies funktionierte einwandfrei bis Android 6.0 . Beim Versuch, es zu verwenden, wird folgende Fehlermeldung angezeigt:

Leere Datei kann nicht angehängt werden

Die Astro-Dateifreigabe gibt mir den gleichen Fehler (kann ein alter Build sein).

Ich habe jedoch ES File Explorer installiert. Wenn ich dieselbe Routine durchführe und die Datei auswähle, erhalte ich einen Dialog mit folgendem Befehl:

Datei abholen als

  • Normaler Android-Weg (für MMS, Gmail, ...)
  • File Way (Versuchen Sie dies, wenn oben fehlschlägt)

Der "File Way" wird wie mein Programm fehlschlagen. Der "normale Android-Weg" wird gut funktionieren.

Hat jemand eine Idee, was es macht, damit ich es replizieren kann?

Danke im Voraus!

OBS: Ich habe den putExtra (STREAM, Pfad) schon öfter ausprobiert, jedoch ohne Erfolg.

18
GuiFGDeo

Ok, habe es jetzt zum Laufen gebracht, nachdem ich viel Nachforschungen angestellt und einige Absichten abgefangen hatte.

Ich musste die Datei: /// in content: // ändern.

Dies habe ich nach den folgenden Informationen von Android gemacht: https://developer.Android.com/reference/Android/support/v4/content/FileProvider.html

Die einzige große Änderung war, dass ich einen hartcodierten Pfad zu /sdcard/file.ext.Also, der Zeile, verwendet habe

getUriForFile(getContext(), "com.mydomain.fileprovider", newFile);

wurde in geändert

Uri contentUri = FileProvider.getUriForFile(this, "com.mydomain.fileprovider", newFile);

Musste auch enthalten:

intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
i.setData(contentUri);

Ich verstehe nicht wirklich, warum ich von File zu Content ändern musste, aber danach wird die Datei jetzt wieder angehängt! Sehen Sie sich den Link an, wenn Sie mit diesem Problem konfrontiert sind, und vergessen Sie nicht die neue XML-Datei, die erstellt werden muss.

16
GuiFGDeo

Siehe die folgende Frage:

Android-6-Dateien können nicht mehr geteilt werden

Dieses Verhalten gilt für Android 6.0 und Google Mail. Bitte sehen Sie den folgenden Thread.

Ausgabe 3141 - Android-Entwickler-Vorschau

Wenn Sie zu Einstellungen-> Anwendungen-> Gmail-> Berechtigungen gehen, aktivieren Sie die "Speicher" -Berechtigung manuell, dann funktioniert die Freigabe.

Google Mail sollte in diesem Szenario nach der Berechtigung "Speicher" und .__ fragen. würde funktionieren wie in der letzten Version von Android.

Andere E-Mail-Apps sollten Anhänge korrekt behandeln.

14
mkabatek

So beheben Sie es.

Gehen Sie zu Einstellungen -> Apps -> Google Mail -> Berechtigungen Aktivieren Sie die Berechtigung für "Speicher" Dieses Problem wurde für mich behoben. 

1
Dan Brooker

Ich konnte keine klare Antwort finden (Senden eines Anhangs über Gmail ohne SD-Karte). Ich habe versucht, in einen anderen Dateinamen zu kopieren, aber keine Zigarre. Die Art, wie ich es zum Laufen brachte, war das Kopieren in den Ordner "Downloads".

Holen Sie sich den Pfad für Downloads mit this Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_DOWNLOADS)

zieht den vollständigen Pfad in den downlaods Ordner, kopiert das Attachemnt dort und wir sind gut. Dateien über 20 Millionen gehen nicht

0
becker