J'ai une liste de contacts présents dans un appareil Android. Je veux récupérer les groupIds et GroupName associés de tous les contacts. J'ai essayé d'utiliser ContactsContract.Groups._ID pour obtenir l'ID, mais je ne suis pas en mesure de l'obtenir. Quelqu'un peut-il me fournir un autre moyen d'obtenir le groupID de contact?Comment puis-je obtenir un groupId/GroupName d'un contact dans Android?
Répondre
Voici comment je le fais. Vous pouvez probablement jouer et trouver une solution plus rapide en ne faisant pas deux requêtes.
L'idée est d'obtenir l'identifiant de ligne du groupe à partir de la table de données en utilisant GroupMembership.GROUP_ROW_ID
. Lorsque vous avez l'identifiant de ligne, vous l'utilisez pour interroger la table Groups afin d'obtenir le nom (Titre) du groupe.
Souvent, le Groups.TITLE
n'est pas un très bon nom et vous devrez probablement le formater ou chercher autour pour trouver quelque chose de mieux.
Voici le code pour obtenir le contact id:
public long getGroupIdFor(Long contactId){
Uri uri = Data.CONTENT_URI;
String where = String.format(
"%s = ? AND %s = ?",
Data.MIMETYPE,
GroupMembership.CONTACT_ID);
String[] whereParams = new String[] {
GroupMembership.CONTENT_ITEM_TYPE,
Long.toString(contactId),
};
String[] selectColumns = new String[]{
GroupMembership.GROUP_ROW_ID,
};
Cursor groupIdCursor = mContext.getContentResolver().query(
uri,
selectColumns,
where,
whereParams,
null);
try{
if (groupIdCursor.moveToFirst()) {
return groupIdCursor.getLong(0);
}
return Long.MIN_VALUE; // Has no group ...
}finally{
groupIdCursor.close();
}
}
Et voici le code pour obtenir le titre du groupe:
public String getGroupNameFor(long groupId){
Uri uri = Groups.CONTENT_URI;
String where = String.format("%s = ?", Groups._ID);
String[] whereParams = new String[]{Long.toString(groupId)};
String[] selectColumns = {Groups.TITLE};
Cursor c = mContext.getContentResolver().query(
uri,
selectColumns,
where,
whereParams,
null);
try{
if (c.moveToFirst()){
return c.getString(0);
}
return null;
}finally{
c.close();
}
}
un contact peut dans de nombreux groupes, pourquoi n'utilisez-vous pas de boucle pour ce cas? – vuhung3990
@ vuhung3990 Bien sûr, vous pouvez le faire, c'est juste l'idée générale. – giZm0
Avez-vous regardé cela? Cela peut aider. http://stackoverflow.com/questions/3026750/android-2-0-contact-groups-manipulation –
giZm0 est sur la bonne voie avec la vue 'GroupMembership' ... gardez à l'esprit cependant qu'un contact peut appartenir à plus qu'un groupe. – eidylon