2010-08-29 7 views
5

Ich habe eine Anwendung erstellt, die eine E-Mail mit einer Aufnahme sendet, wenn die Absicht ausgelöst wird und E-Mail als App zum Senden der Anlage ausgewählt ist, können Sie sehen, dass es eine Anlage ist Anhang wird nicht zugestellt.Android E-Mail-Absicht nicht senden Datei anhängen

Intent sendIntent = new Intent(Intent.ACTION_SEND); 
//Mime type of the attachment (or) u can use sendIntent.setType("*/*") 
sendIntent.setType("audio/3gp"); 
//Subject for the message or Email 
sendIntent.putExtra(Intent.EXTRA_SUBJECT, "My Recording"); 
//Full Path to the attachment 
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(fileName)); 
//Use a chooser to decide whether email or mms 
startActivity(Intent.createChooser(sendIntent, "Send email...")); 

Irgendwelche Ideen?

+0

Ich habe das gleiche Problem mit einem Bild, auch mit der "file: //" am Anfang. Hast du einen anderen Weg gefunden, es zum Laufen zu bringen? – skamlet

+1

Ich habe das Problem gefunden, meine Datei war privat, daher konnte die Mailanwendung die Datei nicht lesen. Es funktioniert jetzt einwandfrei – skamlet

+0

@ D4r7h Wie hast du deine Datei "nicht privat" gemacht? mit 'file.SetReadable (true);' ?? Ich habe auch versucht, die Datei in ~ Ordner zu verschieben, ohne Glück. Ich habe eine TXT-Datei, die korrekt gesendet wird. Können Sie mir einen Hinweis geben, pls? –

Antwort

10

Ich fand es heraus, Sie müssen sicherstellen, dass Ihre URI "file: //" davor hat.

0

Beginnend mit API-Ebene 24 können Sie nicht "file: //" URIs für die Übergabe von Dateien zwischen Paketen verwenden. Stattdessen sollten Sie FileProvider implementieren und die Datei übergeben.

Uri fileUri = FileProvider.getUriForFile(context, "com.yourdomain.yourapp.fileprovider", file); 

Die gute Sache über FileProvides ist, dass man (für API-Level 21 und höher) nicht WRITE_EXTERNAL_STORAGE Erlaubnis benötigen.

Die beste Beschreibung wie unter another StackOverflow answer oder in dieser Dokumentation.