我正在尝试使用联系人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);
插入主要工作正常,组织名称似乎没问题但作业标题似乎没有引用正确的内容。我使用了Organisation.JOB_DESCRIPTION和Organisation.TITLE。
当我手动添加联系人的公司名称和职位时,当您进入查看联系人详细信息时,联系人姓名,公司和职位名称会显示在操作栏中。但是,当我通过上面的代码添加联系人时,我可以看到联系人姓名和他们的公司但不是他们的职位,所以我认为我必须将其添加到错误的地方。
在下面的屏幕截图中,它显示了我想从人员应用程序,名称,组织和标题中添加哪些信息。当这些第一个文本框中包含数据时,当您查看联系人时,此数据将显示在操作栏中。
当我使用上面的代码通过我的应用程序添加联系人时,信息将放在名称的第一个文本框中,组织的第二个联系人,然后是作业标题的5个文本框,因此操作栏仅显示联系人姓名和组织。下面的截图显示了我的意思
答案 0 :(得分:0)
如下所示更改您的添加方法,它可以正常添加标题和公司名称。
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());