Android 以编程方式向新联系人添加组织和组织标题

Android 以编程方式向新联系人添加组织和组织标题,android,android-contacts,Android,Android Contacts,我正在尝试使用contacts API添加联系人信息,其中包括用户组织及其职务 我使用以下代码来执行插入 String contactName = xmlProcessor.getSingleParameterValue("ContactName"); if (xmlProcessor.doesSingleElementExist("CompanyName")) { company = xmlProcessor.getSinglePar

我正在尝试使用contacts API添加联系人信息,其中包括用户组织及其职务

我使用以下代码来执行插入

 String contactName = xmlProcessor.getSingleParameterValue("ContactName");

            if (xmlProcessor.doesSingleElementExist("CompanyName")) {
                company = xmlProcessor.getSingleParameterValue("CompanyName");
            }
            if (xmlProcessor.doesSingleElementExist("CompanyTitle")) {
                companyTitle = xmlProcessor.getSingleParameterValue("CompanyTitle");
            }
            String phoneNumber = xmlProcessor.getSingleParameterValue("PhoneNumber");

            ContactInformation.PhoneNumberType phoneNumberType = ContactInformation.PhoneNumberType.valueOf(xmlProcessor.getSingleParameterValue("PhoneNumberType"));
            String email = xmlProcessor.getSingleParameterValue("Email");
            ContactInformation.EmailType emailType = ContactInformation.EmailType.valueOf(xmlProcessor.getSingleParameterValue("EmailType"));
            String address = xmlProcessor.getSingleParameterValue("Address");
            ContactInformation.AddressType addressType = ContactInformation.AddressType.valueOf(xmlProcessor.getSingleParameterValue("AddressType"));

            ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
            int rawContactID = ops.size();

            //Create the Raw ID
            ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
                .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
                .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
                .build());

            // Adding insert operation to operations list
            // to insert display name in the table ContactsContract.Data
            ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
                .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactID)
                .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
                .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, contactName)
                .build());

            if (company != null) {
                //Adding insert operation to operations list
                //to insert organisation name
                ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
                        .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactID)
                        .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE)
                        .withValue(ContactsContract.CommonDataKinds.Organization.COMPANY, company)
                        .build());
            }

            if (companyTitle != null) {
                //Adding insert operation to operations list
                //to inset organisation title
                ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
                        .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactID)
                        .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE)
                        .withValue(ContactsContract.CommonDataKinds.Organization.JOB_DESCRIPTION, companyTitle)
                        .build());
            }
            // Adding insert operation to operations list
            // to insert Mobile Number in the table ContactsContract.Data
            ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
                .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactID)
                .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
                .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phoneNumber)
                .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, getPhoneTypeInteger(phoneNumberType))
                .build());

            if (!email.equals("")) {
                // Adding insert operation to operations list
                // to insert Email
                ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
                    .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactID)
                    .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
                    .withValue(ContactsContract.CommonDataKinds.Email.ADDRESS, email)
                    .withValue(ContactsContract.CommonDataKinds.Email.TYPE, getEmailTypeInteger(emailType))
                    .build());
            }
            if (!address.equals(""))
            {
                //Insert the address
                ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
                        .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactID)
                        .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
                        .withValue(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS, address)
                        .withValue(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, getAddressTypeInteger(addressType))
                        .build());

            }

            context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
String contactName=xmlProcessor.getSingleParameterValue(“contactName”);
if(xmlProcessor.doesSingleElementExist(“CompanyName”)){
company=xmlProcessor.getSingleParameterValue(“CompanyName”);
}
if(xmlProcessor.doesSingleElementExist(“CompanyTitle”)){
companyTitle=xmlProcessor.getSingleParameterValue(“companyTitle”);
}
字符串phoneNumber=xmlProcessor.getSingleParameterValue(“phoneNumber”);
ContactInformation.PhoneNumberType PhoneNumberType=ContactInformation.PhoneNumberType.valueOf(xmlProcessor.getSingleParameterValue(“PhoneNumberType”);
字符串email=xmlProcessor.getSingleParameterValue(“email”);
ContactInformation.EmailType EmailType=ContactInformation.EmailType.valueOf(xmlProcessor.getSingleParameterValue(“EmailType”);
字符串地址=xmlProcessor.getSingleParameterValue(“地址”);
ContactInformation.AddressType AddressType=ContactInformation.AddressType.valueOf(xmlProcessor.getSingleParameterValue(“AddressType”));
ArrayList ops=新的ArrayList();
int rawContactID=ops.size();
//创建原始ID
添加(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT\u URI)
.withValue(contacts contract.raw contacts.ACCOUNT_TYPE,null)
.withValue(contacts contract.raw contacts.ACCOUNT\u NAME,null)
.build());
//将插入操作添加到操作列表
//在表contacts contract.Data中插入显示名称
添加(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT\uURI)
.带ValueBackReference(contacts contract.Data.RAW\u CONTACT\u ID,RAW contactId)
.withValue(contacts contract.Data.MIMETYPE、contacts contract.commonDataTypes.StructuredName.CONTENT\u ITEM\u TYPE)
.withValue(ContactsContact.CommonDataTypes.StructuredName.DISPLAY\u NAME,contactName)
.build());
如果(公司!=null){
//将插入操作添加到操作列表
//插入机构名称
添加(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT\uURI)
.带ValueBackReference(contacts contract.Data.RAW\u CONTACT\u ID,RAW contactId)
.withValue(contacts contract.Data.MIMETYPE、contacts contract.commondatatypes.Organization.CONTENT\u ITEM\u TYPE)
.withValue(contacts contract.commonDataTypes.Organization.COMPANY,COMPANY)
.build());
}
if(companyTitle!=null){
//将插入操作添加到操作列表
//插入组织名称
添加(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT\uURI)
.带ValueBackReference(contacts contract.Data.RAW\u CONTACT\u ID,RAW contactId)
.withValue(contacts contract.Data.MIMETYPE、contacts contract.commondatatypes.Organization.CONTENT\u ITEM\u TYPE)
.带值(contacts contract.commondatatypes.Organization.JOB_DESCRIPTION,companyTitle)
.build());
}
//将插入操作添加到操作列表
//在表contacts contract.Data中插入手机号码
添加(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT\uURI)
.带ValueBackReference(contacts contract.Data.RAW\u CONTACT\u ID,RAW contactId)
.withValue(contacts contract.Data.MIMETYPE、contacts contract.commondatatypes.Phone.CONTENT\u ITEM\u TYPE)
.withValue(contacts contract.commonDataTypes.Phone.NUMBER,phoneNumber)
.withValue(ContactsContact.CommonDataTypes.Phone.TYPE,getPhoneTypeInteger(phoneNumberType))
.build());
如果(!email.equals(“”){
//将插入操作添加到操作列表
//插入电子邮件
添加(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT\uURI)
.带ValueBackReference(contacts contract.Data.RAW\u CONTACT\u ID,RAW contactId)
.withValue(contacts contract.Data.MIMETYPE、contacts contract.commondatatypes.Email.CONTENT\u ITEM\u TYPE)
.withValue(contacts contract.commondatatypes.Email.ADDRESS,Email)
.withValue(ContactsContract.CommonDataTypes.Email.TYPE,getEmailTypeInteger(emailType))
.build());
}
如果(!address.equals(“”)
{
//插入地址
添加(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT\uURI)
.带ValueBackReference(contacts contract.Data.RAW\u CONTACT\u ID,RAW contactId)
.withValue(contacts contract.Data.MIMETYPE、contacts contract.commondatatypes.Email.CONTENT\u ITEM\u TYPE)
.withValue(ContactsContact.CommonDataTypes.StructuredPostal.FORMATTED_地址,地址)
.withValue(ContactsContract.CommonDataTypes.StructuredPostal.TYPE,getAddressTypeInteger(addressType))
.build());
}
context.getContentResolver().applyBatch(contacts contract.AUTHORITY,ops);
插入的内容基本正常,组织名称似乎正常,但职位名称似乎不正确。我使用过Organization.JOB_描述和Organization.TITLE

当我手动添加公司名为a的联系人时
ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI) 
                .withValueBackReference(Data.RAW_CONTACT_ID, 0) 
                .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE)
                .withValue(ContactsContract.CommonDataKinds.Organization.COMPANY, "Abc Corp")
                .withValue(ContactsContract.CommonDataKinds.Organization.TITLE, "Developer")
                .build());