2016-07-09 7 views
1

Ich habe eine App, die einige Informationen sammelt und ermöglicht es dem Benutzer, es mit Android Intent Framework zu teilen.Android: share einfachen Text als Datei/Anhang

Bisher teilt es den Bericht als Nur-Text: mit putExtra(Intent.EXTRA_TEXT, report), wobei report ein String ist.

Allerdings möchte ich den Bericht als Datei freigegeben werden, so dass es als E-Mail-Anhang und nicht den Körper zu teilen.

Muss ich eine tatsächliche Datei für diesen Zweck erstellen? Wenn dies der Fall ist, muss es sich an einem Speicherort befinden, den andere Apps lesen können, wie in send binary content erläutert.

Ich erwartete eine API, die es mir ermöglichen würde, eine ByteArrayOutputStream bereitzustellen, also vielleicht fehlt mir gerade etwas. Insbesondere möchte ich die Freigabeanwendung NICHT dazu zwingen, Berechtigungen für einen Speicher zu erhalten.

Antwort

1

Verwenden Sie FileProvider, um eine Datei freizugeben, die nicht öffentlich zugänglich ist. Schauen Sie sich Setting Up File Sharing für ein kurzes Tutorial an.

Senden von Text als E-Mail-Anhang ist jedoch ein bisschen schwierig. Sie können text/plain nicht als Typ verwenden, da dies bedeutet, dass die Daten in EXTRA_TEXT geliefert werden. Der Text in diesem Extra wird jedoch im E-Mail-Text und nicht in einem Anhang angezeigt.

Was sollte funktionieren ist die folgende:

Uri fileUri = FileProvider.getUriForFile(context, "org.example.provider.authority", reportFile); 

Intent shareIntent = new Intent(Intent.ACTION_SEND); 
shareIntent.setType("*/*"); 
shareIntent.putExtra(Intent.EXTRA_STREAM, fileUri); 

startActivity(Intent.createChooser(shareIntent, null)); 

Sie sollten auch sicherstellen, dass FileProvider.getType() kehrt text/plain für die Reportdatei. Der einfachste Weg, dies zu erreichen, ist mit .txt als Dateierweiterung und FileProvider wird automatisch das Richtige tun.