我在电话簿中添加了我的应用程序的图标。现在的问题是它在Api级别的工作正常< 23但不在Api水平上工作> 23。
在API 23中,它使用数字创建新的联系人。
String MIMETYPE = "vnd.android.cursor.item/com.appiconincontact";
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
// insert account name and account type
ops.add(
ContentProviderOperation
.newInsert(addCallerIsSyncAdapterParameter(RawContacts.CONTENT_URI, true))
.withValue(RawContacts.ACCOUNT_NAME, Constants.ACCOUNT_NAME)
.withValue(RawContacts.ACCOUNT_TYPE, Constants.ACCOUNT_TYPE)
.withValue(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DEFAULT)
.build()
);
// insert contact number
ops.add(ContentProviderOperation
.newInsert(addCallerIsSyncAdapterParameter(ContactsContract.Data.CONTENT_URI, true))
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, number)
.build());
// insert mime-type data
ops.add(ContentProviderOperation
.newInsert(addCallerIsSyncAdapterParameter(ContactsContract.Data.CONTENT_URI, true))
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE, MIMETYPE)
.withValue(ContactsContract.Data.DATA2, Constants.APP_NAME)
.withValue(ContactsContract.Data.DATA3, "User Connected with " + number)
.build());
try {
resolver.applyBatch(ContactsContract.AUTHORITY, ops);
} catch (Exception e) {
e.printStackTrace();
}
答案 0 :(得分:2)
您正在创建新 RawContact
,并希望系统将其聚合到现有的Contact
。
您错过了&#34;请将此新的原始联系人附加到此现有联系人&#34;一部分。
为此,您需要添加AggregationExceptions。
首先,找到您要添加到的RawContact IDs
中的当前Contact
,然后在新AggregationExceptions
({{1}之间的RawContact._ID
添加一行}}和现有的raw1
(RawContact._ID
)
raw2
修改强>
如果您要将此代码添加到现有批次中:
Builder builder = ContentProviderOperation.newUpdate(AggregationExceptions.CONTENT_URI);
builder.withValue(AggregationExceptions.TYPE, AggregationExceptions.TYPE_KEEP_TOGETHER);
builder.withValue(AggregationExceptions.RAW_CONTACT_ID1, raw1);
builder.withValue(AggregationExceptions.RAW_CONTACT_ID2, raw2);
ops.add(builder.build());
您需要填写的唯一内容是ArrayList<ContentProviderOperation> ops = new ArrayList<>();
// insert account name and account type
ops.add(ContentProviderOperation.newInsert( ... ).build());
// insert contact number
ops.add(ContentProviderOperation.newInsert( ... ).build());
// insert mime-type data
ops.add(ContentProviderOperation.newInsert( ... ).build());
// add an AggregationExceptions line
ops.add(ContentProviderOperation.newUpdate(AggregationExceptions.CONTENT_URI)
.withValue(AggregationExceptions.TYPE, AggregationExceptions.TYPE_KEEP_TOGETHER)
.withValueBackReference(AggregationExceptions.RAW_CONTACT_ID1, 0)
.withValue(AggregationExceptions.RAW_CONTACT_ID2, theRawContactIdOfTheExistingContact)
.build());
try {
resolver.applyBatch(ContactsContract.AUTHORITY, ops);
} catch (Exception e) { ... }
,请注意,不是联系人ID,原始联系人-id ,您需要在其中放置正确的值,具体取决于代码的其余部分以及您如何找到要将数据添加到的联系人。