Android 按组id在特定组中添加联系人

Android 按组id在特定组中添加联系人,android,insert,contactscontract,Android,Insert,Contactscontract,我需要在组中插入联系人。我有小组的身份证 联系人在帐户内插入,但不在指定的组内。我不知道为什么。有人能帮我吗 ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); Account[] accounts = AccountManager.get(getActivity()).getAccounts(); String accountName = null;

我需要在组中插入联系人。我有小组的身份证

联系人在帐户内插入,但不在指定的组内。我不知道为什么。有人能帮我吗

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
Account[] accounts = AccountManager.get(getActivity()).getAccounts();

String accountName = null;
String accountType = null;
String account = "mail@gmail.com";
    for(Account account2 : accounts)
        if(account2.name.equals(account)){
            accountName = account2.name;
            accountType = account2.type;
        }
ops.add(ContentProviderOperation
        .newInsert(ContactsContract.RawContacts.CONTENT_URI)
        .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, accountType)
        .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, accountName)
        .build());

ops.add(ContentProviderOperation
        .newAssertQuery(ContactsContract.Groups.CONTENT_URI)    
        .withSelection(ContactsContract.Groups._ID + " = ?", new String[]{Long.toString(idGroup)})   //new String[]{Long.toString(idGroup)}
        .withExpectedCount(1)
        .build());

ops.add(ContentProviderOperation
        .newInsert(ContactsContract.Data.CONTENT_URI)
        .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
        .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
        .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, "RICARDITO bla bla2")
        .build());

try{
    getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
}catch(Exception e){
    Log.e(ClientEditContact.class.getName(), e.toString());
}
ArrayList ops=new ArrayList();
Account[]accounts=AccountManager.get(getActivity()).getAccounts();
字符串accountName=null;
字符串accountType=null;
字符串帐户=”mail@gmail.com";
用于(账户2:账户)
if(account2.name.equals(account)){
accountName=account2.name;
accountType=account2.type;
}
添加操作(ContentProviderOperation
.newInsert(contacts contract.RawContacts.CONTENT\u URI)
.withValue(contacts contract.raw contacts.ACCOUNT\u类型,accountType)
.withValue(contacts contract.raw contacts.ACCOUNT\u NAME,accountName)
.build());
添加操作(ContentProviderOperation
.newAssertQuery(ContactsContract.Groups.CONTENT\u URI)
.with selection(contacts contract.Groups._ID+“=?”,新字符串[]{Long.toString(idGroup)})//新字符串[]{Long.toString(idGroup)}
.withExpectedCount(1)
.build());
添加操作(ContentProviderOperation
.newInsert(contacts合同.Data.CONTENT\u URI)
.带ValueBackReference(contacts contract.Data.RAW\u CONTACT\u ID,0)
.withValue(Data.MIMETYPE,contacts contract.commonDataTypes.StructuredName.CONTENT\u ITEM\u TYPE)
.带值(contacts contract.commonDataTypes.StructuredName.DISPLAY_NAME,“李嘉图bla2”)
.build());
试一试{
getContentResolver().applyBatch(contacts contract.AUTHORITY,ops);
}捕获(例外e){
Log.e(ClientEditContact.class.getName(),e.toString());
}

以下是我用来将联系人插入通话组的代码。我使用组ID和联系人ID:

   ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
                ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
                        .withValue(ContactsContract.Data.RAW_CONTACT_ID, rawContactId)
                        .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE)
                        .withValue(ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID, groupId)
                        .build());

                try 
                {
                    resolver.applyBatch(ContactsContract.AUTHORITY, ops);
                } catch (RemoteException e) {

                } catch (OperationApplicationException e) {
                // TODO Auto-generated catch block
                    e.printStackTrace();
                }
ArrayList ops=new ArrayList();
添加(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT\uURI)
.带值(contacts contract.Data.RAW\u CONTACT\u ID,RAW contactid)
.withValue(ContactsContact.Data.MIMETYPE、ContactsContact.CommonDataTypes.GroupMembership.CONTENT\u ITEM\u TYPE)
.withValue(ContactsContract.CommonDataTypes.GroupMembership.GROUP\u ROW\u ID,groupId)
.build());
尝试
{
解析程序applyBatch(ContactsContract.AUTHORITY,ops);
}捕获(远程异常){
}捕获(操作应用程序异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}

我想说的是,您需要在ContactsContract.Data数据库中添加联系人,方法是设置ContactsContract.CommonDataTypes.GroupMembership.GROUP\u ROW\u ID&以及联系人ID和正确的mimetype,而不是直接添加到ContactsContracts.GROUP数据库中。

您似乎可以通过联系人ID和组行ID进行查询,然后设置
MIMETYPE
。这真的有用吗?谢谢@Deqing!我之前添加了错误的代码,我只是更新了它。