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?
Zeigt 'file' auf eine Datei im' message/rfc822' Format? – CommonsWare
@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