как добавить контакт в группу андроид
У меня есть следующий код для добавления контакта в группу в контактное приложение android / приложение people, он добавляет группу, но не контакт в этой группе, что мне не хватает ? Я добавляю контакт успешно также создавая группу, я получаю идентификаторы обеих вещей, я использую следующий код, чтобы связать контакт с группой , но его не работает, группа всегда пуста.
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);
}
****обновление ***** Еще одна вещь, которую я нашел, - это группа, которую я создал, не синхронизируется с google, вероятно, по этой причине контакты не добавляются.
2 ответов
наконец, можно добавить контакт в группу, это то, что требовалось, создать контакт, который синхронизируется с учетной записью google (обязательно), во-вторых, создать группу, которая может синхронизироваться с сервисом синхронизации по умолчанию, а затем добавить контакт так, как я добавляю выше код.
Если вам интересно знать, как создать группу, которая может синхронизироваться, вот она
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;
}
используйте ContentProviderOperation для этого.
ArrayList<ContentProviderOperation> operationList = new ArrayList<ContentProviderOperation>();
если группа существует с 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());
если группа не существует:
// 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());
и примените изменения:
ContentProviderResult[] cpr = context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, operationList);