Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/html");
intent.putExtra(Intent.EXTRA_EMAIL, "[email protected]");
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_TEXT, "I'm email body.");
startActivity(Intent.createChooser(intent, "Send Email"));
Der obige Code öffnet einen Dialog mit folgenden Apps: - Bluetooth, Google Text & Tabellen, Yahoo Mail, Google Mail, Orkut, Skype usw.
Eigentlich möchte ich diese Listenoptionen filtern. Ich möchte nur E-Mail-bezogene Apps anzeigen, z. B. Google Mail, Yahoo Mail. Wie es geht?
Ich habe ein solches Beispiel in der Anwendung "Android Market" gesehen.
- Öffnen Sie die Android Market App
- Öffnen Sie eine Anwendung, in der der Entwickler seine E-Mail-Adresse angegeben hat. (Wenn Sie eine solche App nicht finden können, öffnen Sie einfach meine App: - market: // details? Id = com.becomputer06.vehicle.diary.free ODER suchen Sie nach 'Fahrzeugtagebuch')
- Scrollen Sie nach unten zu 'ENTWICKLER'
- Klicken Sie auf "E-Mail senden".
Der Dialog zeigt nur E-Mail-Apps an, z. B. Google Mail, Yahoo Mail usw. Bluetooth, Orkut usw. werden nicht angezeigt. Welcher Code erzeugt einen solchen Dialog?
android
email
android-intent
Dira
quelle
quelle
String[]
, nicht nur einem,String
wie hier gezeigt.Antworten:
Wenn Sie Ihre intent.setType wie unten ändern, erhalten Sie
Verwenden Sie
android.content.Intent.ACTION_SENDTO
diese Option , um nur die Liste der E-Mail-Clients ohne Facebook oder andere Apps abzurufen. Nur die E-Mail-Clients. Ex:Ich würde nicht vorschlagen, dass Sie direkt zur E-Mail-App gelangen. Lassen Sie den Benutzer seine bevorzugte E-Mail-App auswählen. Beschränke ihn nicht.
Wenn Sie ACTION_SENDTO verwenden, funktioniert putExtra nicht, um der Absicht Betreff und Text hinzuzufügen. Verwenden Sie Uri, um den Betreff und den Text hinzuzufügen.
EDIT: Wir können
message/rfc822
statt"text/plain"
als MIME-Typ verwenden. Dies bedeutet jedoch nicht "nur E-Mail-Clients anbieten", sondern "alles anbieten, was Nachrichten- / RFC822-Daten unterstützt". Dies kann leicht einige Anwendungen einschließen, die keine E-Mail-Clients sind.message/rfc822
unterstützt MIME-Typen von.mhtml, .mht, .mime
quelle
no apps installed to perform this intent
wenn ich benutzeACTION_SENDTO
. Ich benutze Android 4.1.2 und ich habe eine E-Mail-App installiert ...message/rfc822
. Das ist nicht dasselbe wie das Senden einer E-Mail. Verwenden Siemailto:
stattdessen das Protokoll, denn das verstehen E-Mail-Clients tatsächlich.Die akzeptierte Antwort funktioniert auf 4.1.2 nicht. Dies sollte auf allen Plattformen funktionieren:
Hoffe das hilft.
Update: Laut marcwjj müssen wir in 4.3 anscheinend ein String-Array anstelle eines Strings für die E-Mail-Adresse übergeben, damit es funktioniert. Möglicherweise müssen wir noch eine Zeile hinzufügen:
Ref Link
quelle
Uri.fromParts("mailto", "", null)
Es gibt drei Hauptansätze:
1. Benutzerdefiniert
Uri
:2.
Intent
Extras verwenden:3. Unterstützungsbibliothek
ShareCompat
:quelle
%
Symbol im Puffer haben, werden einige Zeichen in der resultierenden E-Mail nicht korrekt codiert. Sie müssen denUri.encode
von @minipif vorgeschlagenen Tanz ausführen.Dies wird aus dem offiziellen Android-Dokument zitiert. Ich habe es auf Android 4.4 getestet und funktioniert einwandfrei. Weitere Beispiele finden Sie unter https://developer.android.com/guide/components/intents-common.html#Email
quelle
EXTRA_EMAIL
Ich habe nicht für mich gearbeitet, also habe ichUri.parse("mailto: " + myEmail)
Eine späte Antwort, obwohl ich eine Lösung gefunden habe, die anderen helfen könnte:
Java-Version
Kotlin-Version
Dies war meine Ausgabe (nur Google Mail + Posteingang empfohlen):
Ich habe diese Lösung von der Android-Entwicklerseite erhalten.
quelle
mailto
und der E-Mail kein Leerzeichen steht :mailto:[email protected]
Das funktioniert bei mir:
dh verwenden Sie die
ACTION_SENDTO
Aktion anstelle derACTION_SEND
Aktion. Ich habe es auf einigen Android 4.4-Geräten versucht und es beschränkt das Popup der Auswahl auf die Anzeige von E-Mail-Anwendungen (E-Mail, Google Mail, Yahoo Mail usw.) und fügt die E-Mail-Adresse und den Betreff korrekt in die E-Mail ein.quelle
Versuchen:
quelle
message/rfc822
. Das ist nicht dasselbe wie das Senden einer E-Mail. Verwenden Siemailto:
stattdessen das Protokoll, denn das verstehen E-Mail-Clients tatsächlich.Dies ist der richtige Weg, um die E-Mail-Absicht gemäß der offiziellen Dokumentation für Android-Entwickler zu senden
Fügen Sie Ihrer App folgende Codezeilen hinzu:
Optional: Fügen Sie den Körper und das Motiv wie folgt hinzu
Sie haben diese Zeile bereits hinzugefügt, aber gut für neue Benutzer
Dies ist die Adresse des Empfängers, dh der Benutzer sendet Ihnen (dem Entwickler) eine E-Mail.
quelle
Endlich den besten Weg finden
quelle
Wenn Sie nur die E-Mail-Clients möchten, sollten Sie diese
android.content.Intent.EXTRA_EMAIL
mit einem Array verwenden. Hier ein Beispiel:quelle
ACTION_SENDTO
Der folgende Code funktioniert gut für mich.
quelle
Von Android-Entwicklern docs :
quelle
Bearbeiten: Funktioniert nicht mehr mit neuen Versionen von Google Mail
Dies war der einzige Weg, den ich damals fand, um es mit irgendwelchen Charakteren zum Laufen zu bringen.
Die Antwort von doreamon ist jetzt der richtige Weg, da sie mit allen Zeichen in neuen Versionen von Google Mail funktioniert.
Alte Antwort:
Hier ist mein. Es scheint auf allen Android-Versionen zu funktionieren, mit Unterstützung für Betreff und Nachrichtentext sowie vollständiger Unterstützung für utf-8-Zeichen:
quelle
Uri.encode
ist der richtige Weg. Aber warum zweimal für Subjekt und Körper nennen?Keine dieser Lösungen funktionierte für mich. Hier ist eine minimale Lösung, die auf Lollipop funktioniert. Auf meinem Gerät werden nur Google Mail und die nativen E-Mail-Apps in der resultierenden Auswahlliste angezeigt.
quelle
Funktioniert auf allen Android-Versionen:
quelle
Der folgende Code hat bei mir funktioniert !!
quelle
Das funktioniert bei mir ganz gut:
quelle
Wenn Sie sicherstellen möchten, dass Ihre Absicht nur von einer E-Mail-App (und nicht von anderen Textnachrichten oder sozialen Apps) verarbeitet wird, verwenden Sie die
ACTION_SENDTO
Aktion und fügen Sie das Datenschema "mailto:" hinzu. Zum Beispiel:Ich habe dies in https://developer.android.com/guide/components/intents-common.html#Email gefunden
quelle
in Kotlin, wenn jemand sucht
quelle
Die meisten dieser Antworten funktionieren nur für einen einfachen Fall, wenn Sie keinen Anhang senden . In meinem Fall muss ich manchmal einen Anhang (ACTION_SEND) oder zwei Anhänge (ACTION_SEND_MULTIPLE) senden.
Also habe ich die besten Ansätze aus diesem Thread genommen und sie kombiniert. Es werden Support-Bibliotheken verwendet,
ShareCompat.IntentBuilder
aber ich zeige nur Apps, die mit ACTION_SENDTO und "mailto:" uri übereinstimmen. Auf diese Weise erhalte ich nur eine Liste der E-Mail-Apps mit Anhangsunterstützung:quelle
Die Verwendung
intent.setType("message/rfc822");
funktioniert, zeigt jedoch zusätzliche Apps an, die nicht unbedingt E-Mails verarbeiten (z. B. GDrive). Die VerwendungIntent.ACTION_SENDTO
mitsetType("text/plain")
ist das Beste, aber Sie müssen hinzufügensetData(Uri.parse("mailto:"))
, um die besten Ergebnisse zu erzielen (nur E-Mail-Apps). Der vollständige Code lautet wie folgt:quelle
Wenn Sie auf Google Mail abzielen möchten, können Sie Folgendes tun. Beachten Sie, dass die Absicht "ACTION_SENDTO" und nicht "ACTION_SEND" ist und die zusätzlichen Absichtsfelder für Google Mail nicht erforderlich sind.
quelle
Ich aktualisiere Adils Antwort in Kotlin.
quelle
Bitte verwenden Sie den folgenden Code:
quelle
Vielleicht sollten Sie dies versuchen:
intent.setType("plain/text");
Ich habe es hier gefunden . Ich habe es in meiner App verwendet und es werden nur E-Mail- und Google Mail-Optionen angezeigt.
quelle
plain/text
, und die nicht einmal ein gültiger MIME-Typ ist. Das ist nicht dasselbe wie das Senden einer E-Mail. Verwenden Siemailto:
stattdessen das Protokoll, denn das verstehen E-Mail-Clients tatsächlich.Verfassen Sie eine E-Mail im Telefon-E-Mail-Client:
quelle
Benutze das:
benutze Build Gradle:
quelle
Dies ist, was ich benutze, und es funktioniert für mich:
Auf diese Weise kann der Benutzer auch seine bevorzugte E-Mail-App auswählen. Das einzige, was Sie nicht tun können, ist die E-Mail-Adresse des Empfängers festzulegen.
quelle
"
in der 2. Zeile.quelle
quelle