2016-11-18 41 views
0

我的應用程序允許編輯聯繫人。在這種情況下,我選擇了僅存在於一個帳戶中的聯繫人,並將其更改爲將其與三個帳戶相關聯。但是,我結束了兩個聯繫人,而不是一個,如下面的ContactsContract轉儲所示。爲什麼提供者不會聚合它們?爲什麼不將聯繫人彙總?

agg 1821, display "A Z1", key 770i236434918d3893ea.2709i79dde86f8c1565d3.2709i506dc01a0d43d677.2709i4707c358f8fb503 
    raw 1821, acct type com.google, acct name [email protected] 
    data 10338, display "A Z1" 
    data 10343, phone 123456, Pager 
    data 10349, phone 545, Fax Work 

agg 1861, display "A Z1", key 1780r1860-q29pq04pq5Bpq16p.2709r1861-q29pq04pq5Bpq16p 
    raw 1860, acct type com.fusionone.account, acct name Backup Assistant 
    data 10580, display "A Z1" 
    data 10582, phone 123456, Pager 
    data 10584, phone 545, Fax Work 

    raw 1861, acct type com.google, acct name [email protected] 
    data 10581, display "A Z1" 
    data 10583, phone 123456, Pager 
    data 10585, phone 545, Fax Work 

在此轉儲中,三層表示聚合聯繫人行,原始聯繫人行和聯繫人數據行。前導詞旁邊的數字(例如,agg 1821)是_ID列值。 「display」代表DISPLAY_NAME。

更具體地說,我從agg 1821開始,它來自account [email protected](模糊處理)。然後,我爲兩個其他帳戶創建了兩個新的原始聯繫人(1860和1861),使用與agg 1821相同的顯示名稱。您可以看到結果:兩個新的原始聯繫人聚合在一起,但該對未彙總爲原始(1821)聯繫。

回答

3

不要以爲系統彙總類似的接觸,如果你想RawContacts通過寫AggregationExceptions加盟力聚集:

對於每一對,創建一個操作:

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); 
ContentProviderOperation op = builder.build(); 

然後執行

ContentProviderResult[] res = resolver.applyBatch(ContactsContract.AUTHORITY, operationList); 

res將包含有關成功/ F信息:所有操作ArrayList所有的操作

+0

因爲這種技術的作品,我會給你一個+1,而且是我正在使用的。但是,它沒有回答這個問題。除非有人能夠拿出一個好的理由,在我的例子中,聚合算法失敗了,這似乎是很沒用的。 –

+0

自動彙總決策代碼相當複雜,它也可能使用聯繫人的創建日期來做出決定,所以當您同時創建兩個相同的聯繫人時,它會立即彙總它們,而不是舊彙總。我有幾天後發生聚合的情況,當時通過同步提供程序更新聯繫人。 – marmor

相關問題