2015-08-31 8 views
15

Ich hatte ein Programm, das immer dieselbe Datei an GMAIL anhängen würde (Schreiben> Datei anhängen> Öffnen von> "MeinProgramm"). Es würde immer dieselbe Datei auswählen.Android Eine Datei an GMAIL anhängen - Kann keine Datei anhängen

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(); 

Diese Arbeit war, bis Android 6.0 in Ordnung. Nun erhalte ich folgende Fehlermeldung beim Versuch, es zu benutzen:

kann nicht anhänge leere Datei

Astro File Sharing mir die gleichen Fehler gibt (kann eine altes gebaut werden).

Allerdings habe ich installierte ES Datei Explorer, und wenn ich die gleiche Routine zu tun, und die Datei auswählen, erhalte ich einen Dialog, der sagt:

Pick-up-Datei als

  • Normalen Android Weg (für MMS, Gmail, ...)
  • Datei Way (diese versuchen, wenn oben nicht)

Der "File Way" wird fehlschlagen wie mein Programm. Der "normale Android Way" funktioniert gut.

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

Vielen Dank im Voraus!

OBS: Bereits versucht den putExtra (STREAM, Pfad) oft, aber ohne Erfolg.

+0

Wie lange ist der Name der Datei? –

+0

@Skizo Dies ist der vollständige Pfad + Name: "file: ///sdcard/Example_1MBattachment.mpx" – GuiFGDeo

+0

Versuchen Sie, einen Namen mit weniger Buchstaben zu setzen, ich kenne einen Kerl, dass es sein schlechtes war. –

Antwort

11

Ok, habe es jetzt nach viel Forschung und abfangen einiger Intents zu arbeiten.

Was ich tun musste, war die Datei ändern: /// zu Inhalt: //.

habe ich diese im Anschluss an diesen Informationen von Android: https://developer.android.com/reference/android/support/v4/content/FileProvider.html

Die einzige große Änderung war, dass ich einen hartcodierte Pfad verwendet, um /sdcard/file.ext. Auch die Linie

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

zu

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

auch geändert wurde, hatte zu zählen:

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

ich nicht wirklich verstehen, warum ich von Datei zum Inhalt zu ändern hatte , aber danach wird die Datei wieder angehängt! Wenn Sie mit diesem Problem konfrontiert werden, lesen Sie den Link und vergessen Sie nicht die neue XML-Datei, die erstellt werden muss.

+0

können Sie bitte erarbeiten, wie Sie es funktionieren? Ich bin in der gleichen Grube. Ich möchte es im Detail wissen. Vielen Dank. – prashantwosti

+0

@prashantwosti Hey, es tut mir leid, aber ich kann mich wirklich nicht genau erinnern, wie ich meinem Problem auf den Grund gegangen bin (es ist schon eine Weile her). Ich weiß, dass ich viele Versuche und Fehler hatte. Ich werde es morgen nach der Arbeit betrachten. Versuchen Sie, in den Link zu schauen, den ich referenziere, der Ihnen helfen könnte, besonders die ersten zwei Absätze, die über ** Inhalt ** vs ** Datei ** erklären – GuiFGDeo

+0

Großartig! Hatte es etwas mit dem oben beschriebenen Weg zu tun? Oder war es ganz anders? – GuiFGDeo

14

Siehe die folgende Frage:

android-6-cannot-share-files-anymore

Dieses Verhalten mit Android 6.0 und Google Mail. Bitte beachten Sie den folgenden Thread.

Issue 3141 - android-developer-preview

Wenn Sie> apps> Gmail-> Berechtigungen Einstellungen- gehen und ermöglichen die Aktie Werke "Storage" Erlaubnis manuell, dann.

Gmail sollte in diesem Szenario nach der Berechtigung "Speicher" fragen, und es würde funktionieren, wie es in der gesamten vorherigen Version von Android getan hat.

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

+0

Danke mkabatek. Ich bin mir nicht sicher, ob ich es noch einmal testen kann, da es schon geändert wurde, aber wenn ich kann, werde ich die Ergebnisse melden! – GuiFGDeo

+0

Ich hatte das gleiche Problem auf Nexus 6p und konnte es mit diesen Einstellungen beheben. Bei Nexus 7 mit Android 6.0.1 war dies die Standardeinstellung und ich musste es nicht manuell machen. – user2082415

+0

nein! war dort, das getan, funktioniert nicht. –

0

Hier ist, wie Sie es beheben können.

Gehen Sie zu Einstellungen -> Apps -> Google Mail -> Berechtigungen für „Speicher“ auf die Erlaubnis Schalten Die Work-around löste das Problem für mich.

0

Ich konnte keine klare Antwort finden (Senden eines Anhangs auf Google Mail ohne SD-Karte) Ich habe versucht, auf einen anderen Dateinamen, aber keine Zigarre zu kopieren. Die Art, wie ich es zum Laufen brachte, war, in den Downloads-Ordner zu kopieren und von dort aus zu gehen.

Holen Sie sich den Weg für Downloads mit diesem Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_DOWNLOADS)

zieht den vollständigen Pfad zum Downlaods Ordner, um dort die attachemnt kopieren und wir sind gut. Dateien über 20M gehen nicht