3 votes

Filtre de sélection de contact

J'utilise le sélecteur de contacts de cette manière:

    Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
    this.startActivityForResult(intent, PICK_CONTACT_REQUEST);

Ma question est de savoir si d'une manière ou d'une autre la liste de contacts peut être filtrée? Par exemple, je veux voir uniquement les contacts dans la liste des contacts qui ont au moins un numéro de téléphone ou une adresse e-mail.

4voto

Boris Strandjev Points 18480

Je suggérerais d'utiliser votre vue personnalisée pour les contacts - ce n'est pas vraiment difficile et vous pouvez la personnaliser comme vous le souhaitez. Personnellement, j'ai implémenté de cette manière la fonctionnalité dont vous avez besoin.

Voir ici:

Chaîne PHONE_CONTACTS_ORDER_CLAUSE = ContactsContract.Contacts.DISPLAY_NAME
        + " ASC";

List contacts = new ArrayList(); // J'ai défini le bean PhoneContact
String[] projection = { ContactsContract.Contacts._ID,
        ContactsContract.Contacts.DISPLAY_NAME }; // Choisissez les colonnes dont vous avez besoin
Cursor cursor = this.getContentResolver().query(
        ContactsContract.Contacts.CONTENT_URI, projection, null/* l'endroit pour votre clause where*/, null/* l'endroit pour vos arguments where*/,
        PHONE_CONTACTS_ORDER_CLAUSE);
startManagingCursor(cursor);

int contactIdIdx = cursor.getColumnIndex(ContactsContract.Contacts._ID);
int displayNameIdx = cursor
        .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
while (cursor.moveToNext()) {
    PhoneContact contact = new PhoneContact(); // C'est une classe que j'ai définie, utilisez les données comme vous le souhaitez.
    contact.setContactId(cursor.getString(contactIdIdx));
    contact.setDisplayName(cursor.getString(displayNameIdx));
    contacts.add(contact);
}

ÉDITION Désolé, je me suis laissé distraire en écrivant le commentaire : l'identifiant de contact est en fait le lien entre les différents fournisseurs de données liées aux contacts. Voici quelques fournisseurs supplémentaires que vous pouvez utiliser pour voir s'il existe des téléphones ou des e-mails associés au contact :

ContactsContract.CommonDataKinds.Phone.CONTENT_URI
ContactsContract.CommonDataKinds.Email.CONTENT_URI

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X