2016-08-04 6 views
0

Salut im essayant de créer un nouveau groupe de gmail et d'ajouter le contact à lui. Je réussis à créer un groupe mais les contacts ne sont pas ajoutés à lui. J'ai lu beaucoup de réponses dans stackoverflow mais rien travaillé.Je ne peux pas comprendre où je me suis trompé.Je mets mon code ici s'il vous plaît aider.Ajout de contact au nouveau groupe dans android

Création d'un groupe

public String createGroupInPhone() { 

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

    try { 


     ContentResolver cr = this.getContentResolver(); 
     contentValues = new ContentValues(); 

     contentValues.put(ContactsContract.Groups.TITLE, groupName); 
     contentValues.put(ContactsContract.Groups.SHOULD_SYNC, true); 
     contentValues.put(ContactsContract.Groups.GROUP_VISIBLE, 1); 
     contentValues.put(ContactsContract.Groups.ACCOUNT_TYPE, "com.google"); 
     contentValues.put(ContactsContract.Groups.ACCOUNT_NAME, "[email protected]"); 
     cr.insert(ContactsContract.Groups.CONTENT_URI, contentValues); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    String groupID; 
    Cursor getGroupID_Cursor; 
    getGroupID_Cursor = this.getContentResolver().query(ContactsContract.Groups.CONTENT_URI, GROUP_PROJECTION, ContactsContract.Groups.TITLE + "=?", new String[]{groupName}, null); 

    getGroupID_Cursor.moveToFirst(); 
    groupID = (getGroupID_Cursor.getString(getGroupID_Cursor.getColumnIndex(ContactsContract.Groups._ID))); 
    String groupTitle = (getGroupID_Cursor.getString(getGroupID_Cursor.getColumnIndex(ContactsContract.Groups.TITLE))); 
    System.out.println("Group Title: " + groupTitle); 
    getGroupID_Cursor.close(); 
    return groupID; 
} 

J'ai un doubt.How est lié à cette ContactsContract.Groups._ID GROUP_ROW_ID, GROUP_SOURCE_ID

ajouter au nouveau groupe Contactez

public void addContactsToPhoneGroups(String contact_id, String groupId, String groupName) { 

    System.out.println("ContactId: " + contact_id); 
    System.out.println("GroupId: " + groupId); 
    ArrayList<ContentProviderOperation> ops = new ArrayList<>(); 

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

    getContentResolver().insert(
      ContactsContract.Data.CONTENT_URI, values); 

Répondre

0

Je vois une Beaucoup de gens publient des exemples où ils font une requête ultérieure pour obtenir l'identifiant de l'élément inséré.

Mais le retour de l'insertion est le Uri de la ligne insérée.

Pourquoi perdre un appel à la base de données?

long id = -1; 
Uri insertedUri = getContentResolver().insert(...); 
if (insertedUri!=null) { 
    id = ContentUris.parseId(insertedUri); 
} 
1

1)

public static void createNewGroup(String name,@Nullable String accountName, @Nullable String accountType) 
    { 
     try 
    { 
     ContentValues groupValues = new ContentValues(); 
     groupValues.put(Groups.TITLE, name); 
     groupValues.put(Groups.GROUP_VISIBLE, 1); 
     //groupValues.put(Settings.UNGROUPED_VISIBLE, true); 
     if(accountType != null && accountName != null) 
     { 
      groupValues.put(Groups.ACCOUNT_TYPE, accountType); 
      groupValues.put(Groups.ACCOUNT_NAME, accountName); 
      groupValues.put(Groups.SHOULD_SYNC, true); 

     } 
     else 
     { 
      groupValues.putNull(Groups.ACCOUNT_TYPE); 
      groupValues.putNull(Groups.ACCOUNT_NAME); 
      groupValues.put(Groups.SHOULD_SYNC, false); 

     } 
     getContentResolver().insert(Groups.CONTENT_URI, groupValues); 
     return true; 
    } 
    catch (Exception e){} 
    } 

2)

public static Uri addContactToGroup(String rawContactId,String groupId) 
    { 
     try 
     { 
      ContentValues values = new ContentValues(); 
      values.put(Data.RAW_CONTACT_ID, rawContactId); 
      values.put(GroupMembership.GROUP_ROW_ID, groupId); 
      values.put(Data.MIMETYPE, GroupMembership.CONTENT_ITEM_TYPE); 

      return getContentResolver().insert(Data.CONTENT_URI, values); 
     } 
     catch (Exception e) 
     {} 
     return Uri.EMPTY; 
    } 

3)

public static Cursor getContactGroupId(String contactId) 
    { 
     Uri uri = ContactsContract.Data.CONTENT_URI; 
     String[] columns = new String[] { GroupMembership.GROUP_ROW_ID }; 
     String where = Data.CONTACT_ID + " = ? AND " + Data.MIMETYPE + " = ?"; 
     String[] args = new String[] {contactId, GroupMembership.CONTENT_ITEM_TYPE }; 
     return Cursor contacts = getContentResolver().query(uri, columns, where, arg, null); 
    } 

4)

public static Cursor getGroupsList(@Nullable String[] project,@Nullable String where,@Nullable String[] args,@Nullable String sort) 
    { 

     return getContentResolver().query(Groups.CONTENT_URI, project, where, args, sort); 
    } 
+0

Très beaux exemples, j'ai besoin de poser des questions sur addContactToGroup, Comment ajouter un nouveau contact? Il me manque quelque chose à propos de l'utilisation de cette fonction. J'ai aussi une question sur https://stackoverflow.com/questions/46544711/add-new-group-programmability-android –