69 Stimmen

Ich versuche, eine Datei von der SD-Karte an eine E-Mail anzuhängen

Ich versuche, eine Absicht zu starten, um eine E-Mail zu senden. All das funktioniert, aber wenn ich versuche, die E-Mail tatsächlich zu senden, passieren ein paar "seltsame" Dinge.

Hier ist der Code

Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.setType("image/jpeg");
sendIntent.putExtra(Intent.EXTRA_SUBJECT, "Photo");
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://sdcard/dcim/Camera/filename.jpg"));
sendIntent.putExtra(Intent.EXTRA_TEXT, "Enjoy the photo");
startActivity(Intent.createChooser(sendIntent, "Email:"));

Wenn ich also das Google Mail-Menü im Kontext aufrufe, wird der Anhang angezeigt, ich kann eingeben, an wen die E-Mail gerichtet ist, und den Text und den Betreff bearbeiten. Keine große Sache. Ich drücke auf Senden, und die E-Mail wird gesendet. Das Problem ist nur, dass der Anhang NICHT gesendet wird.

Also dachte ich mir, warum nicht mit dem Kontext des E-Mail-Menüs versuchen (für mein Backup-E-Mail-Konto auf meinem Telefon). Es wird der Anhang angezeigt, aber kein Text im Textkörper oder im Betreff. Wenn ich sie versende, wird der Anhang korrekt gesendet. Das lässt mich vermuten, dass hier etwas nicht stimmt. Benötige ich eine neue Berechtigung im Manifest, um eine E-Mail mit Anhang zu versenden? Was mache ich falsch?

0voto

James Jones Punkte 570

Versuchen Sie auch, Intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) hinzuzufügen; Dies half bei meinem Problem.

0voto

Mahadev Mane Punkte 720

Ich habe eine Lösung für dieses Problem nach 4 Tagen gefunden. Bitte beachten Sie die folgenden Punkte, während Sie den Pfad zur Dateiklasse in Android (Java) angeben:

1) Pfad für internen Speicher verwenden String path="/storage/sdcard0/myfile.txt";

2) path="/storage/sdcard1/myfile.txt";

3) Erwähnen Sie die Berechtigungen in der Manifestdatei.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

4) Prüfen Sie zunächst die Dateilänge zur Bestätigung.

5) Überprüfen Sie die Pfade in ES File Explorer bezüglich sdcard0 & sdcard1, ob diese gleich sind oder nicht......

z.B..

File file=new File(path); 
long=file.length();//in Bytes

0voto

shaiban Punkte 323

Senden Sie eine E-Mail mit einem Anhang: (By docs)

Intent emailIntent = new Intent(Intent.ACTION_SEND); emailIntent.setType(HTTP.PLAIN_TEXT_TYPE);

emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"jon@example.com"});

emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Betreff der E-Mail"); emailIntent.putExtra(Intent.EXTRA_TEXT, "Text der E-Mail-Nachricht"); emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://path/to/email/attachment"));

// Sie können auch mehrere Elemente anhängen, indem Sie eine ArrayList von Uris

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X