Ich verwende Intent.ACTION_SEND
, um eine E-Mail zu senden. Wenn ich jedoch intent
anrufe, werden Auswahlmöglichkeiten zum Senden einer Nachricht, zum Senden einer E-Mail sowie zum Senden über Bluetooth angezeigt. Ich möchte nur die Auswahlmöglichkeiten zum Senden einer E-Mail anzeigen. Wie kann ich das machen?
Intent email = new Intent(Android.content.Intent.ACTION_SEND);
email.setType("application/octet-stream");
BEARBEITEN:
Sie können auch versuchen, den Typ auf "message/rfc822"
einzustellen.
versuche dies....
@Ganapathy: Probieren Sie diesen Code für die Anzeige von Google Mail aus
Intent gmail = new Intent(Intent.ACTION_VIEW);
gmail.setClassName("com.google.Android.gm","com.google.Android.gm.ComposeActivityGmail");
gmail.putExtra(Intent.EXTRA_EMAIL, new String[] { "[email protected]" });
gmail.setData(Uri.parse("[email protected]"));
gmail.putExtra(Intent.EXTRA_SUBJECT, "enter something");
gmail.setType("plain/text");
gmail.putExtra(Intent.EXTRA_TEXT, "hi Android jack!");
startActivity(gmail);
Ich akzeptiere diese Antwort nicht, aber ich glaube, sie gibt die beste Antwort für diesen Beitrag.
Es ist ein weit verbreitetes Missverständnis, text/plain oder text/html zu verwenden. Dadurch wird jede Anwendung ausgelöst, die einfache oder HTML-Textdateien ohne Kontext verarbeiten kann, einschließlich Google Drive, Dropbox, Evernote und Skype.
Verwenden Sie stattdessen einen ACTION_SENDTO
, der den mailto:
-Uri bereitstellt
intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:"));
Sie können dann mit dem Auswahlprogramm fortfahren, wie in den anderen Antworten vorgeschlagen.
Beantwortet von @PaulLammertsma hier Android E-Mail-Wahlhilfe
Das wird dir helfen.
On your button click :
Intent email = new Intent(Intent.ACTION_SEND);
email.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"});
email.putExtra(Intent.EXTRA_SUBJECT, "subject");
email.putExtra(Intent.EXTRA_TEXT, "message");
email.setType("message/rfc822");
startActivity(Intent.createChooser(email, "Choose an Email client :"));
[Lösung für API LEVEL> = 15]
Ich habe es endlich geschafft, E-Mails zu versenden MIT Anhängen an NUR E-Mail-Clients . Ich schreibe es hier, weil es mich sehr viel Zeit gekostet hat und es für andere nützlich sein könnte.
Das Problem ist:
Intent.ACTION_SENDTO nimmt den Daten-URI (damit Sie "mailto:" Schema angeben können), ABER es akzeptiert nicht Intent: EXTRA_STREAM.
Intent.ACTION_SEND akzeptiert Intent: EXTRA_STREAM (damit können Sie Anhang hinzufügen.) ABER es wird nur Type (nicht Daten-URI) benötigt, daher können Sie nicht "Mailto:" - Schema angeben.
Mit Intent.ACTION_SEND kann der Benutzer also aus mehreren Aktivitäten wählen, auch wenn setType ("message/rfc822") gesetzt ist, da diese App/Activities alle Dateitypen (typischerweise GDrive/Dropbox-Apps) und sogar E-Mail-Nachrichtendateien verwalten kann.
Die Lösung befindet sich in der setSelector-Methode ..__ Mit dieser Methode können Sie Intent.ACTION_SENDTO verwenden, um die Aktivität auszuwählen, aber dann den Intent.ACTION_SEND-Intent zu senden.
Hier mein Lösungscode (der Anhang stammt von einem FileProvider, es könnte jedoch eine beliebige Datei sein):
{
Intent emailSelectorIntent = new Intent(Intent.ACTION_SENDTO);
emailSelectorIntent.setData(Uri.parse("mailto:"));
final Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"});
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
emailIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
emailIntent.setSelector( emailSelectorIntent );
Uri attachment = FileProvider.getUriForFile(this, "my_fileprovider", myFile);
emailIntent.putExtra(Intent.EXTRA_STREAM, attachment);
if( emailIntent.resolveActivity(getPackageManager()) != null )
startActivity(emailIntent);
}
Verwenden Sie message/rfc822
-Typ wie hier gezeigt: ACTION_SEND erzwingt das Senden mit E-Mail löst das Problem.
Ich hatte ein ähnliches Problem mit meiner App. Ich fand diesen Link vor kurzem von der offiziellen Android-Entwicklerseite, die wirklich hilft! Gemeinsame Absichten: E-Mail
TL; DR:
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:"));
Jetzt werden Ihnen nur E-Mail-Clients angezeigt!
Sie können einen Betreff und einen Text hinzufügen, indem Sie Folgendes tun:
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_TEXT, "Body" );
Ich stelle fest, dass dies eine ziemlich alte Frage ist, aber es ist das erste Ergebnis bei der Suche nach einer "Mail senden" -Lösung, und alle Antworten haben ein gemeinsames Problem:
Die Verwendung von Intent.ACTION_SEND
und intent.setType("message/rfc822")
führt zu einer Auswahl, die nicht nur Mail-Apps, sondern alle Apps anzeigt, die any MIME-Typ-Unterstützung von message/rfc822 unterstützen können, z. .mhtml
, .mht
, .mime
. Neben Mail-Apps könnten dies Google Drive, Dropbox, Evernote usw. sein.
Die einzige Lösung, die ich gefunden habe, um die Auswahl auf E-Mail-Apps zu beschränken, besteht darin, stattdessen Intent.ACTION_SENDTO zu verwenden:
Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto","[email protected]", null));
intent.putExtra(Intent.EXTRA_SUBJECT, "My Mail");
intent.putExtra(Intent.EXTRA_TEXT , "My Message");
try {
startActivity(Intent.createChooser(i, "Send mail..."));
} catch (Android.content.ActivityNotFoundException ex) {
Toast.makeText(MainActivity.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
}
Erste Lösung: Versuchen Sie, Ihre Intent-Parameter genauer zu definieren. Fügen Sie beispielsweise einen Nachrichtenempfänger hinzu
emailIntent .putExtra(Android.content.Intent.EXTRA_EMAIL, new String[] {"[email protected]"});
Zweite Lösung: Verwenden Sie den package manager , um alle Anwendungen zu finden, die eine Nachricht senden können.
Dies ist eine Kombination von Jack Dsilva und Jignesh Mayani-Lösungen:
try
{
Intent gmailIntent = new Intent(Intent.ACTION_SEND);
gmailIntent.setType("text/html");
final PackageManager pm = _activity.getPackageManager();
final List<ResolveInfo> matches = pm.queryIntentActivities(gmailIntent, 0);
String gmailActivityClass = null;
for (final ResolveInfo info : matches)
{
if (info.activityInfo.packageName.equals("com.google.Android.gm"))
{
gmailActivityClass = info.activityInfo.name;
if (gmailActivityClass != null && !gmailActivityClass.isEmpty())
{
break;
}
}
}
gmailIntent.setClassName("com.google.Android.gm", gmailActivityClass);
gmailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] { "[email protected]" });
gmailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
gmailIntent.putExtra(Intent.EXTRA_CC, "[email protected]"); // if necessary
gmailIntent.putExtra(Intent.EXTRA_TEXT, "Email message");
gmailIntent.setData(Uri.parse("[email protected]"));
this._activity.startActivity(gmailIntent);
}
catch (Exception e)
{
Intent i = new Intent(Intent.ACTION_SEND);
i.putExtra(Intent.EXTRA_EMAIL, new String[] { "[email protected]" });
i.putExtra(Intent.EXTRA_SUBJECT, "Subject");
i.putExtra(Intent.EXTRA_CC, "[email protected]"); // if necessary
i.putExtra(Intent.EXTRA_TEXT, "Email message");
i.setType("plain/text");
this._activity.startActivity(i);
}
Zunächst wird also versucht, die Google Mail-App zu öffnen. Falls ein Benutzer dies nicht hat, wird der zweite Ansatz implementiert.
Bester Code, um zu beschränken, dass nur eine E-Mail gesendet wird. Stellen Sie diesen Typ so ein, dass nur E-Mails gesendet werden. i.setType("message/rfc822");
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("message/rfc822");
i.putExtra(Intent.EXTRA_EMAIL , new String[]{"[email protected]"});
i.putExtra(Intent.EXTRA_SUBJECT, "subject of email");
i.putExtra(Intent.EXTRA_TEXT , "body of email");
try {
startActivity(Intent.createChooser(i, "Send mail..."));
} catch (Android.content.ActivityNotFoundException ex) {
Toast.makeText(Firstclass.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
}
Das hat meinen Tag gerettet. Es sendet eine zusammengesetzte SMS direkt an die Google Mail-App:
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
"mailto","togmail.com", null));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Report message");
emailIntent.putExtra(Intent.EXTRA_TEXT, edt_msg.getText().toString());
startActivity(Intent.createChooser(emailIntent, "Send email..."));