2017-01-18 9 views
0

지난 몇 주 동안의 동기화 어댑터에 대한 전반적인 개념을 이해하고 기능에 대한 질문이 거의 없습니다. 나는 사용자 계정을 생성하고 또한 동기화 어댑터를 만든Android - Android 연락처의 변경 사항을 듣고 델타 가져 오기

:

나는

접근을 안드로이드 연락처에있는 모든 변경에 1을 듣고 싶습니다. ContactsContract.Contacts.CONTENT_URI 및 클래스로 수신하는 브로드 캐스트 수신기 작성 연락처 데이터가 변경 될 때 동기화 어댑터를 시작하기위한 트리거 포인트 역할을하는 ContentResolver.requestSync(account,ContactsContract.AUTHORITY,bundle)을 호출하고 있습니다.

모든 그래서 어떻게 접촉에서 델타의 변화받을 수 여기까지하지만 난

onPerofmSyncSyncResult 변수에 데이터를받지 못하고있어 SyncAdapter 클래스에서 잘 보이는?

동기화 어댑터를 트리거하는 방법이 아닌 경우 수정하십시오.

접근법 2 :

나는 그들이 dirtyFlag은 1. 내가 변화를 얻을 수 있었다 로 설정되어있는 연락처 데이터베이스를 쿼리에 대해 얘기했다 몇 가지 예를 따랐다

하지만 내 질문은

입니다

누가 dirtyFlag 값을 '0'으로 다시 설정합니까?

내가해야한다면, 똑같은 일을 전화 상에 여러 개의 응용 프로그램이 있다고 가정 해 봅시다. 내 응용 프로그램이 정보에 액세스하려고하기 전에 일부 응용 프로그램에서 플래그를 '0'으로 설정하는 경우 나는 모든 변화를 놓치고있다.

접근 방법 3 :

쿼리 데이터베이스와 내 자신의 데이터베이스에있는 각 연락처에 대해 version 추적하고 '버전'변경된 경우 것을 고려 접촉의 변화로. 이것은 무거운 과정처럼 보입니다.

마지막으로 내 질문은 사용자의 기기에서 연락처의 변경 사항을 청취하는 가장 좋은 방법입니다. 당신이 할 수있는 일

답변

0

Contacts.LOOKUP_KEYRawContacts.VERSION 값 사이의 매핑을 (아마도 로컬 MySql 데이터베이스를 사용) 유지이다.

당신은 모든 RawContacts.VERSION의 쿼리 및 변경이 (onChange를 통해) Contacts DB에 일어난 방송을 일단 자신의 Contacts.LOOKUP_KEY을하고 그들 중 하나가 변경된 경우, 당신은 좋겠 전에 유지 한 상태로 비교 연락이 바뀌 었다는 것을 알아라.

+0

네, 제 질문과 마찬가지로 제 3의 접근법입니다. – Prakash

+1

옙, 내가하는 일은 그렇게 무거운 과정이 아니며 모든 연락처를 거치는 쿼리 없이는이 작업을 수행 할 방법이 없습니다. – marmor

+0

"registerContentObserver (ContactsContract.Contacts.CONTENT_URI"호출의 가장 작은 방아쇠가있을 때마다 변경된 내용을보기 위해 전체 연락처에 대한 쿼리를 수행해야합니다. –