2015-09-01 9 views
7

Ich habe folgenden Code, um den Kontakt zu einer Gruppe in androids Kontakt App/Leute App hinzufügen, fügt es die Gruppe, aber nicht den Kontakt in dieser Gruppe, was fehlt mir? Ich füge Kontakt erfolgreich hinzu und erstelle auch eine Gruppe, ich bekomme die IDs von beiden Dingen, ich benutze folgenden Code, um den Kontakt mit der Gruppe zu verbinden, aber es funktioniert nicht, Gruppe ist immer leer.Wie füge ich einen Kontakt zu einer Gruppe 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); 

} 

**** Update ***** Eine andere Sache, fand ich diese Gruppe, die ich mit Google nicht sync erstellt bekommt, wahrscheinlich der Grund, Kontakte das ist nicht hinzugefügt zu werden.

Antwort

2

konnte schließlich füge einen Kontakt t hinzu o Gruppe, dies ist, was erforderlich war, erstellen Sie einen Kontakt, der mit Google-Konto synchronisiert wird (obligatorisch), zweitens erstellen Sie eine Gruppe, die mit Standard-Sync-Service synchronisieren kann und fügen Sie dann Kontakt hinzu, wie ich oben genannten Code hinzufügen.

wenn Sie neugierig sind, zu wissen, wie Gruppe zu erstellen, die hier synchronisieren können, ist es

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

Verwenden Sie hierzu ContentProviderOperation.

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

Wenn die Gruppe mit groupId vorhandenen ist,

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()); 

Wenn Gruppe bestehenden nicht:

// 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()); 

Und die Änderungen zu übernehmen:

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

Ich habe eine Frage, wenn der Kontakt nicht mit Google-Konto wird es noch zu dieser Gruppe hinzugefügt bekommt synchronisiert wird, Verwenden der obigen Methode? –