2017-03-17 66 views
0

我在电话簿中添加我的应用程序的图标。现在的问题是,它在Api级别工作良好,但在Api级别> 23上工作不正常。在联系人上添加应用程序图标不工作在棉花糖

在API 23中,它创建了带号码的新联系人。

在阿比21 Api 21

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

回答

2

你正在创建一个新的RawContact,并且希望该系统汇总成一个现有Contact

您错过了“请将此新的原始联系人添加到此现有联系人”部分。

为此,您需要添加AggregationExceptions

首先,找到您要添加到,然后添加一行AggregationExceptions您的新RawContact._IDraw1)和现有的RawContact._IDraw2

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

编辑之间的联系Contact当前RawContact IDs

如果要将此代码添加到您的现有批次:

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) { ... } 

你需要在这里填写的唯一事情是theRawContactIdOfTheExistingContact,请注意,这是不是接触-ID,它是一个原料接触-ID,你需要把正确的价值在那里,这取决于剩下的代码以及如何找到联系人来添加数据。

+0

你可以为它添加完整的代码吗?它不起作用 –

+0

添加代码,显示此操作如何适合您的现有批次 – marmor

+0

即时通讯创建** raw-contact_id **使用此链接http://stackoverflow.com/questions/19675279/getting-rawcontact-id-using- contact-id但不工作 –

相关问题