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"));
Powyższy kod otwiera okno dialogowe z następującymi aplikacjami: - Bluetooth, Dokumenty Google, Yahoo Mail, Gmail, Orkut, Skype itp.
Właściwie chcę filtrować te opcje list. Chcę wyświetlać tylko aplikacje związane z pocztą e-mail, np. Gmail, Yahoo Mail. Jak to zrobić?
Widziałem taki przykład w aplikacji „Android Market”.
- Otwórz aplikację Android Market
- Otwórz dowolną aplikację, w której programista podał swój adres e-mail. (Jeśli nie możesz znaleźć takiej aplikacji, po prostu otwórz ją: - market: // details? Id = com.becomputer06.vehicle.diary.free LUB wyszukaj według „Vehicle Diary”)
- Przewiń w dół do „DEVELOPER”
- Kliknij „Wyślij e-mail”
Okno dialogowe pokazuje tylko aplikacje e-mail, np. Gmail, Yahoo Mail itp. Nie wyświetla Bluetooth, Orkut itp. Jaki kod powoduje takie okno dialogowe?
android
email
android-intent
dira
źródło
źródło
String[]
nie tylkoString
pokazanemu tutaj.Odpowiedzi:
kiedy zmienisz swój intent.setType jak poniżej, otrzymasz
Służy
android.content.Intent.ACTION_SENDTO
do pobierania tylko listy klientów e-mail, bez Facebooka i innych aplikacji. Tylko klienci poczty e-mail. Dawny:Nie sugeruję przejścia bezpośrednio do aplikacji e-mail. Pozwól użytkownikowi wybrać swoją ulubioną aplikację e-mail. Nie ograniczaj go.
Jeśli używasz ACTION_SENDTO, putExtra nie działa, aby dodać temat i tekst do intencji. Użyj Uri, aby dodać temat i treść.
EDYCJA: Możemy użyć
message/rfc822
zamiast"text/plain"
jako typu MIME. Nie oznacza to jednak „oferuj tylko klientów e-mail” - oznacza to „oferuj wszystko, co obsługuje dane typu wiadomość / rfc822”. Może to z łatwością obejmować niektóre aplikacje, które nie są klientami poczty e-mail.message/rfc822
obsługuje typy MIME.mhtml, .mht, .mime
źródło
no apps installed to perform this intent
kiedy używamACTION_SENDTO
. Używam Androida 4.1.2 i mam zainstalowaną aplikację e-mail ...message/rfc822
. To nie to samo, co wysyłanie wiadomości e-mail.mailto:
Zamiast tego użyj protokołu, ponieważ tak rozumieją klienci poczty e-mail.Akceptowana odpowiedź nie działa w 4.1.2. Powinno to działać na wszystkich platformach:
Mam nadzieję że to pomoże.
Aktualizacja: Według marcwjj wydaje się, że w wersji 4.3 musimy przekazać tablicę ciągów zamiast ciągu dla adresu e-mail, aby działał. Może być konieczne dodanie jeszcze jednej linii:
Link referencyjny
źródło
Uri.fromParts("mailto", "", null)
Istnieją trzy główne podejścia:
1. Niestandardowe
Uri
:2. Korzystanie z
Intent
dodatków:3. Biblioteka wsparcia
ShareCompat
:źródło
%
symbol w buforze, niektóre znaki w wynikowej wiadomości e-mail nie zostaną poprawnie zakodowane. Musisz wykonaćUri.encode
taniec sugerowany przez @minipif.Jest to cytowany z oficjalnego dokumentu Androida, przetestowałem go na Androidzie 4.4 i działa idealnie. Zobacz więcej przykładów na https://developer.android.com/guide/components/intents-common.html#Email
źródło
EXTRA_EMAIL
nie działa dla mnie, więc użyłemUri.parse("mailto: " + myEmail)
Późna odpowiedź, choć wymyśliłem rozwiązanie, które może pomóc innym:
Wersja Java
Wersja Kotlin
To był mój wynik (sugerowany tylko Gmail + Skrzynka odbiorcza):
Mam to rozwiązanie z witryny dla programistów Androida .
źródło
mailto
e-mailem nie było spacji :mailto:[email protected]
To działa dla mnie:
tzn. użyj
ACTION_SENDTO
akcji zamiastACTION_SEND
akcji. Wypróbowałem to na kilku urządzeniach z Androidem 4.4 i ogranicza wyskakujące okno wyboru tylko do wyświetlania aplikacji e-mail (E-mail, Gmail, Yahoo Mail itp.) I poprawnie wstawia adres e-mail i temat wiadomości e-mail.źródło
Próbować:
źródło
message/rfc822
. To nie to samo, co wysyłanie wiadomości e-mail.mailto:
Zamiast tego użyj protokołu, ponieważ tak rozumieją klienci poczty e-mail.Jest to właściwy sposób wysłania wiadomości e-mail zgodnie z oficjalną dokumentacją programisty Androida
Dodaj następujące wiersze kodu do swojej aplikacji:
Opcjonalnie: dodaj treść i temat, w ten sposób
Ten wiersz już został dodany, ale warto go mieć dla nowych użytkowników
Będzie to adres odbiorcy, co oznacza, że użytkownik wyśle do ciebie (programistę) wiadomość e-mail.
źródło
Wreszcie wymyśl najlepszy sposób na zrobienie tego
źródło
Jeśli chcesz tylko klientów e-mail, których powinieneś używać
android.content.Intent.EXTRA_EMAIL
z tablicą. Oto przykład:źródło
ACTION_SENDTO
Poniższy kod działa dla mnie dobrze.
źródło
Z dokumentów programistów Androida :
źródło
Edycja: nie działa już z nowymi wersjami Gmaila
To był jedyny sposób, w jaki znalazłem w tym czasie, aby działał z dowolnymi postaciami.
Odpowiedź doreamon jest teraz właściwą drogą, ponieważ działa ze wszystkimi postaciami w nowych wersjach Gmaila.
Stara odpowiedź:
Tutaj jest moje. Wygląda na to, że działa na wszystkich wersjach Androida, z obsługą tematu i treści wiadomości oraz pełną obsługą znaków utf-8:
źródło
Uri.encode
to właściwa droga. Ale po co nazywać to dwa razy dla przedmiotu i ciała?Żadne z tych rozwiązań nie działało dla mnie. Oto minimalne rozwiązanie, które działa na Lollipop. Na moim urządzeniu tylko Gmail i natywne aplikacje e-mail pojawiają się na wynikowej liście wyboru.
źródło
Działa na wszystkich wersjach Androida:
źródło
Poniższy kod działał dla mnie !!
źródło
Działa to dla mnie idealnie:
źródło
Jeśli chcesz upewnić się, że Twoje zamiary są obsługiwane tylko przez aplikację e-mail (a nie inne wiadomości tekstowe lub aplikacje społecznościowe), użyj
ACTION_SENDTO
akcji i dołącz schemat danych „mailto:”. Na przykład:Znalazłem to w https://developer.android.com/guide/components/intents-common.html#Email
źródło
w Kotlinie, jeśli ktoś szuka
źródło
Większość tych odpowiedzi działa tylko w prostym przypadku, gdy nie wysyłasz załącznika . W moim przypadku czasami muszę wysłać załącznik (ACTION_SEND) lub dwa załączniki (ACTION_SEND_MULTIPLE).
Więc wziąłem najlepsze podejścia z tego wątku i połączyłem je. Korzysta z biblioteki wsparcia,
ShareCompat.IntentBuilder
ale pokazuję tylko aplikacje, które pasują do ACTION_SENDTO z „mailto:” uri. W ten sposób otrzymuję tylko listę aplikacji e-mail z obsługą załączników:źródło
Korzystanie
intent.setType("message/rfc822");
działa, ale pokazuje dodatkowe aplikacje, które niekoniecznie obsługują wiadomości e-mail (np. GDrive). UżywanieIntent.ACTION_SENDTO
zsetType("text/plain")
jest najlepsze, ale musisz dodać,setData(Uri.parse("mailto:"))
aby uzyskać najlepsze wyniki (tylko aplikacje e-mail). Pełny kod wygląda następująco:źródło
Jeśli chcesz kierować reklamy na Gmaila, możesz wykonać następujące czynności. Pamiętaj, że zamiarem jest „ACTION_SENDTO”, a nie „ACTION_SEND”, a dodatkowe pola zamiaru nie są konieczne dla Gmaila.
źródło
Aktualizuję odpowiedź Adila w Kotlinie,
źródło
Proszę użyć poniższego kodu:
źródło
Może powinieneś spróbować:
intent.setType("plain/text");
Znalazłem to tutaj . Użyłem go w mojej aplikacji i pokazuje tylko opcje e-mail i Gmail.
źródło
plain/text
, a to nawet nie jest prawidłowy typ MIME. To nie to samo, co wysyłanie wiadomości e-mail.mailto:
Zamiast tego użyj protokołu, ponieważ tak rozumieją klienci poczty e-mail.Utwórz wiadomość e-mail w klienckim telefonie e-mail:
źródło
Użyj tego:
użyj stopnia kompilacji:
źródło
Oto, czego używam i działa dla mnie:
Pozwoli to również użytkownikowi wybrać preferowaną aplikację e-mail. Jedyne, czego na to nie pozwala, to ustawienie adresu e-mail odbiorcy.
źródło
"
w 2. linii.źródło
źródło