2014-06-12 58 views
0

我備份和恢復接觸rawContacts,我能夠做到這一點,但在使用ContactsContract.AggregationExceptions
rawcontacts用於連接觸點(加入接點)的聚合如果我加入3個觸點,說跟A(主)和聯繫B(鏈接)和C(連接) 我做的備份和恢復,爲新創建的ID與正確的映射,我更新了ContactsContract.AggregationExceptions.CONTENT_URI與下面的代碼:如何聚合使用aggregationException內容correclty

private boolean aggregateContactLinks() { 
     ContentResolver cr = context.getContentResolver(); 
     int listCount = linkList.size(); 
     ContentValues values = new ContentValues(3); 
     Log.i(tag, "aggregating contacts"); 
     for (int i=0; i<listCount; i++) { 

       values.put(AggregationExceptions.RAW_CONTACT_ID1, 
         linkList.get(i).newId1); 
       values.put(AggregationExceptions.RAW_CONTACT_ID2, 
         linkList.get(i).newId2); 
       values.put(AggregationExceptions.TYPE, 
         AggregationExceptions.TYPE_KEEP_TOGETHER); 

       Log.i(tag," new master id(id1) :"+linkList.get(i).newId+"\nlinkid2 :"+newId2); 
       Log.i(tag, 
         "result :" 
           + cr.update(AggregationExceptions.CONTENT_URI, 
             values, null, null)); 
       Log.i(tag, "\nupdated one contact"); 

     } 
     values.clear(); 
     return true; 
    } 

輸出,在手機上我可以看到鏈接的內容,但在顯示名稱的聯繫人是c,而不是一個

備份 enter image description here

備份後,刪除聯繫人和恢復 enter image description here

後,任何人都可以知道究竟我要去錯,在此先感謝

+0

你是如何做「備份」? –

回答

1

如果你想告訴Android聯繫人提供者它應該使用特定的原始聯繫人名稱作爲聚合聯繫人(不顯示鏈接的聯繫人B和C的名稱,但顯示主要聯繫人A的名稱),則可以使用RawContactsColumn.NAME_VERIFIED。在更新聚合異常後,只需將您的主要原始聯繫人設置爲「1」即可。

我發現這招在標準的聯繫人應用程序的 code

// Mark the original contact as "name verified" to make sure that the contact 
// display name does not change as a result of the join 
if (verifiedNameRawContactId != -1) { 
    Builder builder = ContentProviderOperation.newUpdate(
      ContentUris.withAppendedId(RawContacts.CONTENT_URI, verifiedNameRawContactId)); 
    builder.withValue(RawContacts.NAME_VERIFIED, 1); 
    operations.add(builder.build()); 
} 

RawContactsColumn接口是受保護的,所以你應該使用「name_verified」作爲列名。由於RawContactsColumn未打開的事實,也許您應該在更新之前檢查「name_verified」列是否存在以避免崩潰。

+1

「name_verified」fiels在android M中被移除(預覽2) – silly