2016-11-18 2 views
0

내 앱에서 연락처를 수정할 수 있습니다. 이 시나리오에서는 하나의 계정에만있는 연락처를 선택하여 3 개의 계정과 연결했습니다. 그러나 아래의 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 

이 덤프에서 세 계층은 집계 연락처 행, 원시 연락처 행 및 연락처 데이터 행을 나타냅니다. 선두 단어 (예 : 1821) 옆의 숫자는 _ID 열 값입니다. '디스플레이'는 DISPLAY_NAME을 (를) 나타냅니다.

더 구체적으로 말하자면, 계정 [email protected]에서 가져온 agg 1821로 시작했습니다 (난독 화). 그런 다음 두 개의 다른 계정에 대해 두 개의 새로운 원시 연락처 (1860 및 1861)를 생성하여 1821에 대한 것과 동일한 표시 이름을 사용했습니다. 결과를 볼 수 있습니다. 두 개의 새 원시 연락처가 함께 집계되었지만 그 쌍은 원본과 집계되지 않았습니다. (1821) 연락.

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

는 그런 다음을 실행 : 각 쌍에 대해

, 작업을 만들 : 당신이 AggregationExceptions에 작성하여 힘 집계에 가입 RawContacts를 원하는 경우

답변

3

는 유사한 연락처를 집계 시스템을 가정하지 마십시오

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

res는 성공/F에 대한 정보를 포함합니다 : 모든 작업의 ​​ArrayList 모든 작업의 ​​단서

+0

이 기술이 작동하기 때문에 +1을 드리겠습니다. 그리고 저는 이것을 사용하고 있습니다. 그러나 그것은 질문에 대답하지 않습니다. 예를 들어 누군가 집계 알고리즘이 실패한 좋은 이유를 생각해 낼 수 없다면 꽤 쓸모없는 것처럼 보입니다. –

+0

자동 집계 결정 코드는 매우 복잡합니다. 연락처 작성 날짜를 사용하여 결정을 내릴 수도 있으므로 동시에 두 개의 동일한 연락처를 만들면 즉시 집계되지만 이전 것은 연결하지 않을 수 있습니다. 며칠 후, 동기화 공급자를 통해 연락처가 업데이트되었을 때 집계가 발생한 경우가있었습니다. – marmor