2016-03-30 9 views
0

Ich habe eine Absicht, die FileProvider verwendet, um aus dem internen Dateispeicher für meine App zu lesen, um eine Datei per E-Mail (oder ähnliche Apps) zu senden. Der Code funktioniert offensichtlich überall gut, außer für Google Mail, das eine Liste des Adressaten des E-Mail-Postfachs auf seltsame Weise mit einer Version des Provider-Pfads verknüpft.Streunender Dateipfad zu E-Mail-Datei mit Dateianhang hinzugefügt

Dies ist der Code Generierung der Absicht:

public static Intent getSendIntent(Uri uri) { 
    final Intent i = new Intent(Intent.ACTION_SEND); 
    i.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
    i.setDataAndType(uri, "message/rfc822"); 
    i.putExtra(Intent.EXTRA_EMAIL, new String[] { "[email protected]" }); 
    i.putExtra(Intent.EXTRA_SUBJECT, "Export"); 
    i.putExtra(Intent.EXTRA_TEXT, "See the attached..."); 
    i.putExtra(Intent.EXTRA_STREAM, uri); 
    return i; 
} 

Dies ist der Code, um die Aktivität zu starten:

File file = new File(getFilesDir(), filename); 
Uri uri = FileProvider.getUriForFile(MainActivity.this, "com.example.myapplication.provider", file); 
Intent i = Utils.getSendIntent(uri); 

try { 
    startActivity(Intent.createChooser(i, "Send file...")); 
} catch (Exception e) { 
    Log.d(TAG, "failed to start send activity: " + e.getMessage()); 
    Toast.makeText(MainActivity.this, "No suitable activity found for export.", Toast.LENGTH_SHORT).show(); 
} 

Arbeiten gut in Slack, Evernote, etc., aber in Gmail zusätzlich zu Die von mir angegebene E-Mail-Adresse wird hinzugefügt:

//com.example.myapplication.provider/my_files/filefile.csv

verhindert, dass die E-Mail gesendet wird, bis sie manuell aus der Nachricht entfernt wird. Alles andere an der Nachricht ist wie erwartet.

Irgendwelche Hinweise, wie Sie dies verhindern können?

+1

Zeigt 'file' auf eine Datei im' message/rfc822' Format? – CommonsWare

+0

@CommonsWare Nein, und Ihre Frage führte mich zur Quelle meines Problems. Ich habe gerade den setDataAndType zu einem Standard setType ersetzt und alles scheint gut. * schlägt Kopf – k3davis

Antwort

0

Die folgende Captain Obvious-Lösung löste das Problem.

ersetzen:

i.setDataAndType(uri, "message/rfc822"); 

mit:

i.setType("message/rfc822"); 

da, wie @ CommonWare Frage abgeleitete, ist der Dateiinhalt nicht selbst in rfc822 Format.