2010-12-08 7 views
2

백업 응용 프로그램을 작성 중이며 연락처 데이터베이스의 어떤 레코드가 업데이트되었는지 알고 있어야 해당 레코드 만 백업 할 수 있습니다. 설명서를 살펴 봤는데 ContactsContract.RawContacts 클래스에 "DIRTY"상수 필드가있는 것으로 보입니다.이 필드는 업데이트되는 행에 대해 "1"로 설정해야합니다. 그러나이 필드가 언제 "0"으로 지워지는지는 분명하지 않습니다. 누군가이 코드를 사용하는 방법에 대한 예제 코드를 제공 할 수 있습니까? 이 필드를 사용하여 연락처가 추가 또는 업데이트되었는지 확인할 수 있습니까? 이것이 올바른 방법이 아니라면 누군가 다른 방법을 제안 할 수 있습니다. 또한 ContactsContentObserver() 호출을 사용하여 연락처 데이터베이스에 변경 사항이있을 때마다이를 식별 할 수 있다는 것을 알고 있지만 이는 너무 비싸고 할 일이없는 백그라운드에서 항상 실행중인 응용 프로그램을 필요로합니다. 그. 여러 연락처가 추가되거나 업데이트되었을 때 타임 스탬프를 추출 할 수 있다면 완벽 할 수도 있지만 어떻게 할 수는 없어요. 도움을 주시면 대단히 감사하겠습니다.연락처 데이터베이스에서 어떤 행이 업데이트되었는지 확인하는 방법

+0

user887304 어떻게 문제를 해결 했습니까 – rakesh

답변

0

설명서를 살펴본 결과 ContactsContract.RawContacts 클래스에 "DIRTY"상수 필드가있는 것으로 보입니다.이 필드는 업데이트되는 행에 대해 "1"로 설정해야합니다. 그러나이 필드가 언제 "0"으로 지워지는지는 분명하지 않습니다.

필자의 경험에 따르면 일종의 '더티'표시기가있을 때마다 백업/동기화 작업 중에 데이터가 성공적으로 커밋되면 백업/동기화 앱이 다시 설정해야합니다.

두 개 이상의 응용 프로그램을 사용할 때 문제가 발생할 수 있습니다. 데이터를 업데이트 한 후 언제든지 처음 실행하면 플래그가 재설정되고 다음 실행은 백업/동기화 할 항목이 없습니다.

이 경우 사용자가 '동기화'앱을 사용할 수 있지만 '백업'작업을 원할 경우 ContentObserver를 등록하면 더 나은 목적을 달성 할 수 있으며 이유가 없습니다. 올바르게 구현 된 경우 자원에 '비싸'야하는 이유는 무엇입니까?

편집 : '타임 스탬프'는 없지만 '버전'필드가 업데이트됩니다 ('DIRTY'가 설정된 경우). 이 필드를 백업하는 경우 'DIRTY'플래그를 설정하고 연락처 DB의 현재 VERSION과 가장 최근의 백업을 비교하면됩니다.

+0

답장을 보내 주셔서 감사합니다. "VERSION"필드에서 변경 사항을 확인합니다. 이것은 ContentObserver를 등록하는 것보다 간단한 구현으로 보인다. – AnilV

+0

VERSION 필드를 가져 오는 쿼리를 알려주시겠습니까? http://developer.android.com/intl/ja/reference/android/provider/ContactsContract.RawContacts.html에 대한 우려가 있지만 실마리를 찾을 수 없습니다. – kgandroid

+0

@kgandroid : 'RawContacts.VERSION'을'projection' 인자로 전달 된'String []'의 요소 중 하나로서'getContentResolver(). query (...)'호출에 추가 할 수 있습니다. 게시 한 링크의 예제 코드를 참조하십시오. – Squonk

관련 문제