2013-02-12 3 views
0

ICS의 프레임 워크에서 근본적인 해결책을 찾았습니다. Android 연락처 제공 업체의 ContactsProvider2가 삽입/업데이트 후에 notifyChange를 호출하는 것처럼 보입니다. 그것으로 :Android ContentObserver - 연락처 - 존재하지 않음 업데이트

모든 삽입/갱신/연락처 기관에 삭제 열린 업데이트를 얻을 콘텐츠 관찰자를 유발한다는 것을 의미
NotifyChange(ContactsContract.AUTHORITY_URI, null, syncToNetwork); 

. 이론적으로는 꽤 좋은데 .. 프레즌스 업데이트로 인해 발생하는 것처럼 보입니다.

데이터 테이블에 커서를 가져 오려고하면 해당 데이터 테이블도 현재 상태로 연결되고 현재 상태에 대한 업데이트에는 onLoadFinished가 호출되어 (CursorLoader) 호출됩니다. ContactsProvider2 차례로 모든 데이터 행에 Presnce/상태 열을 추가

setTablesAndProjectionMapForData() 

를 호출하기 때문에이처럼

커서 문제로 보면, 그것은 보인다.

appendContactPresenceJoin(sb, projection, RawContacts.CONTACT_ID); 
appendContactStatusUpdateJoin(sb, projection, ContactsColumns.LAST_STATUS_UPDATE_ID); 
appendDataPresenceJoin(sb, projection, DataColumns.CONCRETE_ID); 
appendDataStatusUpdateJoin(sb, projection, DataColumns.CONCRETE_ID); 

존재의 변경 인/아웃 실제로 점점 업데이트 승 변경 데이터 테이블에 업데이트를 얻을 수있는 내용 관찰자를 등록 할 수있는 방법이 있습니까? 나는 존재가 2.3/3.x에서 Data.CONTENT_URI 쿼리에서 제외되어야한다고 생각했다. 그러나 그것이 바뀌었던 것처럼 보인다. ..

답변

0

어떤 약 CONTENT_VCARD_URI?

+0

이것은 단일 연락처를 참조하기 때문에 작동하지 않을 것이라고 생각합니다. 내 문제는 엔터프라이즈 환경에서 발생했습니다. 설명하기가 다소 어려웠지만 우리는 반환 할 때마다 장치 리소스를 끄고 끈 상태에서 여러 결과를 비동기 적으로 집계하여 공급자에게 알렸습니다. 장치의 경우 커서 로더를 통해이 목록에 액세스했습니다. 그러나 알림 업데이트는 계속 스트리밍을 계속하고 우리가 db의 다른 데이터와 다시 병합을 시도하도록 만들었습니다. 지나치게 복잡한 사용 사례로, 나는 지금 우리가 한 해결책을 기억하지 못합니다. – Chrispix