Je voudrais choisir un e-mail de la liste de contacts. Choisir un contact est pas assez bon, parce qu'un contact peut avoir plusieurs e-mails.
Utilisation de la démo de l'API, j'ai réussi à prendre un contact, numéro de téléphone et même une adresse. Exemple:. P>
new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Email.CONTENT_URI);
5 Réponses :
Je n'ai pas spécifiquement essayé d'utiliser un sélecteur, mais boucle de nous grâce à notre cache des contacts et trouver tous les détails de contact avec un type de MIME Ensuite, nous construire une boîte de dialogue pour le choix de l'utilisateur let quelle adresse e-mail qu'ils souhaitent utiliser, et nous passons cette adresse e-mail à l'application e-mail de l'utilisateur, par exemple p> Email.CONTENT_ITEM_TYPE code>.
final Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.putExtra(Intent.EXTRA_STREAM, "Some text");
Builder builder = new Builder(this);
builder.setTitle("Choose email");
builder.setItems(emailAddressesArray, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
String address = emailAddresses.get(emailAddressesArray[which]);
sLog.user("User selected e-mail: " + address);
emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{address});
startExternalActivity(emailIntent);
}
});
builder.show();
Voici un peu exemple de code pour afficher toutes les adresses e-mail dans la liste de contacts à l'utilisateur et leur permettre de sélectionner un seul (qui est ensuite placé dans un Remarque: strong> em> Ceci est une façon de faire assez inefficace, et provoquera un certain retard si vous avez beaucoup de contacts. Mais tout le code nécessaire est ici; personnaliser comme bon vous semble ... p> EditText code> avec l'id R.id.youredittextid em>)
// We're going to make up an array of email addresses
final ArrayList<HashMap<String, String>> addresses = new ArrayList<HashMap<String, String>>();
// Step through every contact
final ContentResolver cr = getContentResolver();
final Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
while (cursor.moveToNext())
{
final String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
final String contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
// Pull out every email address for this particular contact
final Cursor emails = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId, null, null);
while (emails.moveToNext())
{
// Add email address to our array
final String strEmail = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
final HashMap<String, String> email = new HashMap<String, String>();
email.put("Name", contactName);
email.put("Email", strEmail);
addresses.add(email);
}
emails.close();
}
// Make an adapter to display the list
SimpleAdapter adapter = new SimpleAdapter(this, addresses, android.R.layout.two_line_list_item,
new String[] { "Name", "Email" },
new int[] { android.R.id.text1, android.R.id.text2 });
// Show the list and let the user pick an email address
new AlertDialog.Builder(this)
.setTitle("Select Recipient")
.setAdapter(adapter, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
EditText e = (EditText)findViewById(R.id.youredittextid);
HashMap<String, String> email = addresses.get(which);
e.setText(email.get("Email"));
dialog.dismiss();
}
}).create().show();
vous devez utiliser la constante suivante (non CONTENT_ITEM_TYPE):
intent.setType(ContactsContract.CommonDataKinds.Email.CONTENT_TYPE);
Un vieux fil, mais ... cette information pourrait se révéler utile à quelqu'un.
Lorsque vous démarrez une intention avec La dernière version de vanille (Google) Contacts app (Android 4.4.4) n'a En bref, cette intention devrait fonctionner sur KK avec les contacts de vanille installé, et ne devrait pas fonctionner sur les versions Android plus. P> Intent.ACTION_PICK code> vous essayez d'invoquer l'activité « Contact Picker », qui est habituellement fourni par des contacts / application Répertoire. p>
Email.CONTENT_ITEM_TYPE code> pour mimetype dans son filtre intention, il devrait donc répondre à cette intention, comme vous l'avez fait . Je ne suis pas sûr, mais il semble que pour contacter Picker versions plus anciennes (ICS, JB) n'a pas eu cela dans ses filtres d'intention. p>
fonctionne parfaitement:
Intent intent = new Intent(Intent.ACTION_PICK); intent.setType(ContactsContract.CommonDataKinds.Email.CONTENT_TYPE); startActivityForResult(intent, 1); @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1) { if (resultCode == Activity.RESULT_OK) { Uri contactData = data.getData(); Cursor cursor = getActivity().managedQuery(contactData, null, null, null, null); cursor.moveToFirst(); String email = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER)); editText.setText(email); } } }
Avez-vous trouvé une solution à cela? Construire une boîte de dialogue personnalisée, comme THA réponses suggèrent, est une solution très laid.