2015-09-01 11 views
7

Ho il seguente codice per aggiungere un contatto a un gruppo nell'app di contatti/app di contatto di Android, aggiunge il gruppo ma non il contatto in quel gruppo, cosa mi manca? Sto aggiungendo il contatto con successo anche creando un gruppo, ottengo gli ID di entrambe le cose, sto usando il seguente codice per associare il contatto con il gruppo ma non funziona, il gruppo è sempre vuoto.come aggiungere un contatto a un gruppo android

public Uri addToGroup(long personId, long groupId) { 

    ContentValues values = new ContentValues(); 
    values.put(ContactsContract.CommonDataKinds.GroupMembership.RAW_CONTACT_ID, 
      personId); 
    values.put(
      ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID, 
      groupId); 
    values 
      .put(
        ContactsContract.CommonDataKinds.GroupMembership.MIMETYPE, 
        ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE); 

    return this.getActivity().getContentResolver().insert(
      ContactsContract.Data.CONTENT_URI, values); 

} 

aggiornamento **** ***** Un'altra cosa che ho trovato è questo gruppo che ho creato non ottiene la sincronizzazione con Google, probabilmente questo è il motivo per cui i contatti non sono sempre aggiunti.

risposta

2

Infine potrebbe aggiungi un contatto t o gruppo, questo è quanto richiesto, creare un contatto che si sincronizza con l'account google (obbligatorio), in secondo luogo creare un gruppo che può sincronizzarsi con il servizio di sincronizzazione predefinito e quindi aggiungere il contatto come sto aggiungendo nel codice precedente.

se siete curiosi di sapere come creare gruppo che può sincronizzare, qui è

public String createGroup(String name) { 

    String[] GROUP_PROJECTION = new String[] { ContactsContract.Groups._ID,  ContactsContract.Groups.TITLE }; 

    try { 
     ContentValues groupValues = null; 
     ContentResolver cr = this.getContentResolver(); 
     groupValues = new ContentValues(); 
     groupValues.put(ContactsContract.Groups.TITLE, name); 
     groupValues.put(ContactsContract.Groups.SHOULD_SYNC,true); 
     cr.insert(ContactsContract.Groups.CONTENT_URI, groupValues); 

    } 
    catch(Exception e){ 
     Log.d("########### Exception :",""+e.getMessage()); 
     return "1"; 
    } 

    String groupID = null; 
    Cursor getGroupID_Cursor = null; 
    getGroupID_Cursor = this.getContentResolver().query(ContactsContract.Groups.CONTENT_URI, GROUP_PROJECTION, ContactsContract.Groups.TITLE+ "=?", new String[]{name}, null); 

    getGroupID_Cursor.moveToFirst(); 
    groupID = (getGroupID_Cursor.getString(getGroupID_Cursor.getColumnIndex("_id"))); 

    return groupID; 


} 
1

Utilizzare ContentProviderOperation per questo.

ArrayList<ContentProviderOperation> operationList = new ArrayList<ContentProviderOperation>(); 

Se il gruppo è esistente con groupId,

operationList.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) 
.withValue(ContactsContract.CommonDataKinds.GroupMembership.MIMETYPE, 
    ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE) 
.withValue(ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID, 
    groupId).build()); 

Se il gruppo non è attuale:

// create group and insert 
ContentValues groupValues; 
ContentResolver cr = context.getContentResolver(); 

groupValues = new ContentValues(); 
groupValues.put(ContactsContract.Groups.TITLE, newGroupId); 

try { 
    cr.insert(ContactsContract.Groups.CONTENT_URI, groupValues); 
} catch (Exception e) { 
    // handle 
} 

operationList.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
    .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) 
    .withValue(ContactsContract.CommonDataKinds.GroupMembership.MIMETYPE, 
     ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE) 
    .withValue(ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID, newGroupId).build()); 

E, applicare le modifiche:

ContentProviderResult[] cpr = context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, operationList); 
+0

Ho una domanda se il contatto non è sincronizzato con l'account Google sarà ancora ottenere aggiunto a questo gruppo, usando il metodo sopra? –