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"));
Kode di atas membuka dialog yang menunjukkan aplikasi berikut: - Bluetooth, Google Documents, Yahoo Mail, Gmail, Orkut, Skype dll.
Sebenarnya, saya ingin memfilter daftar-opsi ini. Saya hanya ingin menampilkan aplikasi terkait email misalnya Gmail, Yahoo Mail. Bagaimana cara melakukannya?
Saya telah melihat contoh seperti itu pada aplikasi 'Android Market'.
- Buka aplikasi Android Market
- Buka aplikasi apa pun di mana pengembang telah menentukan alamat emailnya. (Jika Anda tidak dapat menemukan aplikasi semacam itu, cukup buka aplikasi saya: - market: // details? Id = com.becomputer06.vehicle.diary.free, ATAU cari dengan 'Vehicle Diary')
- Gulir ke bawah ke 'DEVELOPER'
- Klik pada 'Kirim Email'
Dialog hanya menampilkan Aplikasi email misalnya Gmail, Yahoo Mail dll. Tidak menampilkan Bluetooth, Orkut dll. Kode apa yang menghasilkan dialog seperti itu?
android
email
android-intent
dira
sumber
sumber
String[]
, bukan hanyaString
seperti yang ditunjukkan di sini.Jawaban:
ketika Anda akan mengubah intent.setType Anda seperti di bawah ini Anda akan dapatkan
Gunakan
android.content.Intent.ACTION_SENDTO
hanya untuk mendapatkan daftar klien email, tanpa facebook atau aplikasi lain. Hanya klien email. Ex:Saya tidak akan menyarankan Anda langsung ke aplikasi email. Biarkan pengguna memilih aplikasi email favoritnya. Jangan memaksanya.
Jika Anda menggunakan ACTION_SENDTO, putExtra tidak berfungsi untuk menambahkan subjek dan teks ke maksud. Gunakan Uri untuk menambahkan teks subjek dan isi.
EDIT: Kita bisa menggunakan
message/rfc822
bukan"text/plain"
sebagai tipe MIME. Namun, itu tidak menunjukkan "hanya menawarkan klien email" - ini menunjukkan "menawarkan apa pun yang mendukung data pesan / rfc822". Itu bisa dengan mudah menyertakan beberapa aplikasi yang bukan klien email.message/rfc822
mendukung Jenis MIME dari.mhtml, .mht, .mime
sumber
no apps installed to perform this intent
ketika saya menggunakanACTION_SENDTO
. Saya menggunakan Android 4.1.2 dan saya memiliki aplikasi email diinstal ...message/rfc822
. Itu tidak sama dengan mengirim email. Gunakanmailto:
protokol sebagai gantinya, karena itulah yang sebenarnya dipahami klien email.Jawaban yang diterima tidak bekerja pada 4.1.2. Ini harus bekerja pada semua platform:
Semoga ini membantu.
Pembaruan: Menurut marcwjj , sepertinya pada 4.3, kita perlu meneruskan array string daripada string agar alamat email berfungsi. Kami mungkin perlu menambahkan satu baris lagi:
Tautan ref
sumber
Uri.fromParts("mailto", "", null)
Ada tiga pendekatan utama:
1. Kustom
Uri
:2. Menggunakan
Intent
ekstra:3. Perpustakaan Dukungan
ShareCompat
:sumber
%
simbol di buffer, beberapa karakter dalam email yang dihasilkan tidak akan dikodekan dengan benar. Anda perlu menampilkanUri.encode
tarian yang disarankan oleh @minipif.Ini dikutip dari Android doc resmi, saya sudah mengujinya di Android 4.4, dan berfungsi dengan baik. Lihat lebih banyak contoh di https://developer.android.com/guide/components/intents-common.html#Email
sumber
EXTRA_EMAIL
tidak bekerja untuk saya, jadi saya menggunakanUri.parse("mailto: " + myEmail)
Sebuah jawaban yang terlambat, meskipun saya menemukan solusi yang dapat membantu orang lain:
Versi Java
Versi Kotlin
Ini adalah output saya (hanya disarankan Gmail + Inbox):
Saya mendapat solusi ini dari situs Pengembang Android .
sumber
mailto
dan email:mailto:[email protected]
Ini bekerja untuk saya:
yaitu menggunakan
ACTION_SENDTO
aksi daripadaACTION_SEND
tindakan. Saya sudah mencobanya di beberapa perangkat Android 4.4 dan membatasi pemilih untuk hanya menampilkan aplikasi email (Email, Gmail, Yahoo Mail, dll) dan memasukkan dengan benar alamat email dan subjek ke dalam email.sumber
Mencoba:
sumber
message/rfc822
. Itu tidak sama dengan mengirim email. Gunakanmailto:
protokol sebagai gantinya, karena itulah yang sebenarnya dipahami klien email.Ini adalah cara yang tepat untuk mengirim maksud email sesuai dengan Dokumentasi Resmi Pengembang Android
Tambahkan baris kode ini ke aplikasi Anda:
Opsional: Tambahkan tubuh dan subjek, seperti ini
Anda telah menambahkan baris ini, tetapi bagus untuk dimiliki oleh pengguna baru
Ini akan menjadi alamat penerima, artinya pengguna akan mengirimi Anda (pengembang) email.
sumber
Akhirnya datang dengan cara terbaik untuk dilakukan
sumber
Jika Anda hanya ingin klien email yang harus Anda gunakan
android.content.Intent.EXTRA_EMAIL
dengan array. Ini dia sebuah contoh:sumber
ACTION_SENDTO
Kode berikut ini berfungsi dengan baik untuk saya.
sumber
Dari pengembang Android docs :
sumber
Sunting: Tidak berfungsi lagi dengan versi baru Gmail
Ini adalah satu-satunya cara yang saya temukan pada saat membuatnya berfungsi dengan karakter apa pun.
Jawaban doreamon adalah cara yang benar untuk pergi sekarang, karena berfungsi dengan semua karakter di versi baru Gmail.
Jawaban lama:
Ini milik saya. Tampaknya berfungsi pada semua versi Android, dengan dukungan subjek dan pesan, dan dukungan penuh karakter utf-8:
sumber
Uri.encode
adalah cara yang tepat untuk digunakan. Tetapi mengapa menyebutnya dua kali untuk subjek dan tubuh?Tidak ada solusi yang bekerja untuk saya. Inilah solusi minimal yang berfungsi pada Lollipop. Di perangkat saya, hanya Gmail dan aplikasi email asli yang muncul dalam daftar pemilih yang dihasilkan.
sumber
Bekerja di Semua Versi Android:
sumber
Kode berikut berhasil untuk saya !!
sumber
Ini bekerja dengan baik untuk saya:
sumber
Jika Anda ingin memastikan bahwa maksud Anda hanya ditangani oleh aplikasi email (dan bukan aplikasi pesan teks atau sosial lainnya), maka gunakan
ACTION_SENDTO
tindakan tersebut dan sertakan skema data "mailto:". Sebagai contoh:Saya menemukan ini di https://developer.android.com/guide/components/intents-common.html#Email
sumber
di Kotlin kalau ada yang melihat
sumber
Sebagian besar jawaban ini hanya berfungsi untuk kasus sederhana ketika Anda tidak mengirim lampiran . Dalam kasus saya, saya terkadang perlu mengirim lampiran (ACTION_SEND) atau dua lampiran (ACTION_SEND_MULTIPLE).
Jadi saya mengambil pendekatan terbaik dari utas ini dan menggabungkannya. Itu menggunakan perpustakaan dukungan
ShareCompat.IntentBuilder
tetapi saya hanya menampilkan aplikasi yang cocok dengan ACTION_SENDTO dengan "mailto:" uri. Dengan cara ini saya hanya mendapatkan daftar aplikasi email dengan dukungan lampiran:sumber
Menggunakan
intent.setType("message/rfc822");
tidak berfungsi tetapi ini menunjukkan aplikasi tambahan yang tidak perlu menangani email (mis. GDrive). MenggunakanIntent.ACTION_SENDTO
dengansetType("text/plain")
adalah yang terbaik tetapi Anda harus menambahkansetData(Uri.parse("mailto:"))
untuk mendapatkan hasil terbaik (hanya aplikasi email). Kode lengkapnya adalah sebagai berikut:sumber
Jika Anda ingin menargetkan Gmail maka Anda dapat melakukan hal berikut. Perhatikan bahwa maksudnya adalah "ACTION_SENDTO" dan bukan "ACTION_SEND" dan bidang maksud ekstra tidak diperlukan untuk Gmail.
sumber
Saya memperbarui jawaban Adil di Kotlin,
sumber
Silakan gunakan kode di bawah ini:
sumber
Mungkin Anda harus mencoba ini:
intent.setType("plain/text");
Saya menemukannya di sini . Saya telah menggunakannya di aplikasi saya dan hanya menampilkan opsi E-Mail dan Gmail.
sumber
plain/text
, dan itu bahkan bukan tipe MIME yang valid. Itu tidak sama dengan mengirim email. Gunakanmailto:
protokol sebagai gantinya, karena itulah yang sebenarnya dipahami klien email.Tulis email di klien email ponsel:
sumber
Gunakan ini:
gunakan build gradle:
sumber
Inilah yang saya gunakan, dan itu berfungsi untuk saya:
Ini juga akan memungkinkan pengguna memilih aplikasi email pilihan mereka. Satu-satunya hal yang tidak dapat Anda lakukan adalah mengatur alamat email penerima.
sumber
"
di baris ke-2.sumber
sumber