在联系人上添加应用程序图标不在Marshmallow中工作

时间:2017-03-17 07:29:58

标签: android android-6.0-marshmallow android-contacts

我在电话簿中添加了我的应用程序的图标。现在的问题是它在Api级别的工作正常< 23但不在Api水平上工作> 23。

  在API 23中,它使用数字创建新的联系人。

在Api 21 Api 21

在Api 23 enter image description here

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();
                }

1 个答案:

答案 0 :(得分:2)

您正在创建 RawContact,并希望系统将其聚合到现有的Contact

您错过了&#34;请将此新的原始联系人附加到此现有联系人&#34;一部分。

为此,您需要添加AggregationExceptions

首先,找到您要添加到的RawContact IDs中的当前Contact,然后在新AggregationExceptions({{1}之间的RawContact._ID添加一行}}和现有的raw1RawContact._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 ,您需要在其中放置正确的值,具体取决于代码的其余部分以及您如何找到要将数据添加到的联系人。