obtenir des infos de contact à partir d'android sélecteur de contacts
J'essaie d'appeler le sélecteur de contacts, obtenir des personnes nom, prénom, téléphone et e-mails en chaînes et de les envoyer à une autre activité à l'aide d'une intention. Jusqu'à présent cela fonctionne:
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, 1);
//...
@Override
public void onActivityResult(int reqCode, int resultCode, Intent data) {
super.onActivityResult(reqCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
Uri contactData = data.getData();
Cursor c = managedQuery(contactData, null, null, null, null);
if (c.moveToFirst()) {
String name = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
Intent intent = new Intent(CurrentActivity.this, NewActivity.class);
intent.putExtra("name", name);
startActivityForResult(intent, 0);
}
}
}
Mais si j'ajoute dans:
String number = c.getString(c.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));
force ferme
Peut-être theres une autre façon d'obtenir leur numéro?
Vous devez vous connecter pour publier un commentaire.
Numéros De Téléphone
Les numéros de téléphone sont stockés dans leur propre table, et doivent être interrogés séparément. Pour interroger le numéro de téléphone de l'utilisation de la table de l'URI stockées dans le SDK variable ContactsContract.CommonDataKinds.Téléphone.CONTENT_URI. Utiliser un OÙ conditionnelle pour obtenir les numéros de téléphone pour le contact.
Effectuer une deuxième requête contre les contacts Android de base de données SQLite. Les numéros de téléphone sont interrogés à l'encontre de l'URI stockées dans ContactsContract.CommonDataKinds.Téléphone.CONTENT_URI. Le contact ID est stocké dans le téléphone de table comme ContactsContract.CommonDataKinds.Téléphone.CONTACT_ID et la clause where est utilisée pour limiter les données renvoyées.
Adresses E-Mail
L'interrogation des adresses e-mail sont similaires à des numéros de téléphone. Une requête doit être exécutée pour obtenir des adresses e-mail à partir de la base de données. L'URI de la requête stockée dans ContactsContract.CommonDataKinds.E-mail.CONTENT_URI à la requête de l'adresse e-mail de la table.
Comme avec le téléphone de la requête les noms de champ pour l'e-mail de table sont également stockées sous ContactsContract.CommonDataKinds. L'e-mail de la requête est effectuée sur l'URI dans ContactsContract.CommonDataKinds.E-mail.CONTENT_URI et la clause where doit correspondre à la ContactsContract.CommonDataKinds.E-mail.CONTACT_ID champ. Depuis plusieurs adresses e-mail peuvent être stockés en boucle les enregistrements renvoyés dans le Curseur.
Plus de tutoriels ici
Cette méthode nécessite l'API Android, version 5 ou supérieure.
ContactsContract.Contacts.Entity
ici: stackoverflow.com/a/14082019/1606534Bâtiment sur la accepté de répondre, si vous souhaitez accéder directement à l'adresse e-mail désirée et ne pas exiger que les contacts de l'autorisation d'utiliser quelque chose comme ceci:
Cela ne nécessite pas les contacts de l'autorisation de lire l'adresse e-mail comme le double méthodes de requête ci-dessus. Il a également fait en sorte que vous n'avez pas besoin d'écrire de l'INTERFACE utilisateur pour l'utilisateur de sélectionner l'adresse e-mail appropriée pour des contacts avec plusieurs e-mails, l'utilisateur sélectionne une adresse de courriel spécifique dans l'application Contacts de sorte que vous obtenez seulement un résultat.
Le curseur revient avec quelques colonnes en plus de simplement l'adresse email comme nom d'affichage, mais qui n'a été vérifiée sur un Nexus 5 sous Android M.