Zuerst werden Sie denken "Warte, diese Frage ist ein Duplikat!". Weiter lesen.Senden von E-Mail mit Anhang mit SENDTO auf einigen Geräten funktioniert nicht
Ich versuche, die Absicht ACTION_SENDTO
(mit einer E-Mail-URI als Daten) zu verwenden, um nur E-Mail-Anwendungen zu haben.
(mit ACTION_SEND
startet ein Standard "SEND" -Wähler ohne Daten-URI bedeutet, dass keine Mail-Apps wie Google Drive reagieren).
Mein Problem ist, dass der Anhang mit ACTION_SEND
auf allen Geräten funktioniert, aber - wenn Sie ACTION_SENDTO
verwenden nur einige Geräte korrekt die Dateien anhängen. Nexus 7 funktioniert, aber Samsung Galaxy Tab und Acer Iconia nicht.
Sie können unter den verschiedenen Methoden nebeneinander sehen:
String email = getActivity().getResources().getString(R.string.supportEmail);
String subject = getActivity().getResources().getString(R.string.sFeedback);
subject = String.format(subject,
getActivity().getResources().getString(R.string.productName));
String content = getActivity().getResources().getString(R.string.whatFeedbackWouldYouLikeToProvide) + "\n\n" +
mMessage.getText().toString();
File toSend = new File(outfile);
if(toSend.exists()) {
Log.e("Feedback", "File path: " + toSend.getAbsolutePath());
Intent emailIntent = new Intent(android.content.Intent.ACTION_SENDTO);
emailIntent.setData(Uri.parse("mailto:" +email));
emailIntent.putExtra(android.content.Intent.EXTRA_STREAM, Uri.fromFile(toSend));
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, content);
/* Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.setType("message/rfc822");
emailIntent.putExtra(Intent.EXTRA_EMAIL , new String[]{email});
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(Intent.EXTRA_TEXT , content);
emailIntent.putExtra(Intent.EXTRA_STREAM , Uri.fromFile(toSend)); */
try {
startActivity(emailIntent);
} catch (ActivityNotFoundException anfe) {
Toast.makeText(getActivity(), getResources().getString(R.string.pleaseInstallAnEmailClientInOrderToSendUsFeedback), 8000).show();
}
}
Sie können sehen, dass die Dateipfade scheinen nicht das Problem zu sein, habe ich in einigen Protokollierung hinzugefügt, die berichtet:
Samsung Gibt:
04-11 11:40:09.953: E/Feedback(6286): File path: /storage/sdcard0/logs.zip
Nexus Gibt:
04-11 11:38:59.249: E/Feedback(12702): File path: /storage/emulated/0/logs.zip
(beide basierend auf getExternalStorageDirectory()
, um den anwendungsübergreifenden Zugriff zu gewährleisten).
Weiß jemand, warum der Unterschied?
sollte 'Uri.parse (" mailto: "+ email)' sein, aber Sie vermissen auch eine Klammer auf dieser Linie, so könnte es Frage Tippfehler sein. –
ja, sorry, Tippfehler in Frage. – Graeme
Etwas muss im filePath falsch sein, da der Rest des Codes korrekt ist. Überkreuzen Sie einfach den URI, der sich auf den gültigen Standort bezieht oder nicht. Zweitens darf die anzuhängende Datei nicht im Anwendungsverzeichnis oder Cache-Verzeichnis liegen. –