2012-04-12 3 views
1

서버 정보와 Android 연락처 정보를 동기화하는 응용 프로그램을 작성하고 있습니다. 서버 정보가 변경되면 모든 원시 연락처와 모든 사람을 행복하게 업데이트합니다. 그러나 연락처를 여러 개의 원시 연락처로 업데이트 한 후 연락처 ID의 값이 하나씩 증가한다는 것을 알았습니다. 기기 연락처 ID에서 연락처를 업데이트해도 ID는 동일합니다.업데이트 후 연락처 ID가 증가합니다 (Android API 레벨 7 이상)

는 다음 데이터와 연락처를 가지고 있다고 가정 :

contact_id : 42 
raw_contact_ids : { 43, 44, 45 } 

(1) 업데이트 후 당신은 할 수 있습니다 :

contact_id : 43 
raw_contact_ids : { 43, 44, 45 } 

(2) 그러나이 같은 접촉을 업데이트하는 경우를 uisng 기기가있는 사용자 인터페이스 :

contact_id : 42 
raw_contact_ids : { 43, 44, 45 } 

나는 이러한 동작을 이해하지 못합니다. 연락처 집계 때문일 수도 있지만 (2)의 결과가 (1)과 동일하지 않은 이유를 이해하지 못한다고 가정합니다. 원시 연락처의 전화 번호 데이터를 업데이트하기 위해 다음 코드를 사용하고 있습니다.

 
String selectPhone = Data.RAW_CONTACT_ID + "=? AND " + Data.MIMETYPE + "='" + 
    Phone.CONTENT_ITEM_TYPE + "'" + " AND " + Phone.TYPE + "=? AND " + Phone._ID + "=?"; 
String[] selectArgs = new String[] { String.valueOf(rawContactId), String.valueOf(from.getType()), String.valueOf(id) }; 
ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI) 
    .withSelection(selectPhone, selectArgs) 
    .withValue(Phone.NUMBER, newNumber) 
    .build()); 

누군가 내가 뭘 잘못 설명하고 있습니까? 나는 정말로 그 연락처 ID가 필요합니다.

답변

2

연락처를 저장하거나 사용할 때 LOOKUP_KEY를 사용하는 것이 더 좋습니다. 연락처 ID를 사용하면 집계로 인해 정적 상태가되지 않습니다.

+0

LOOKUP_KEY 란 무엇이며 무엇을 사용해야합니까? http://developer.android.com에서 그것에 대해 읽었지만 많이 이해하지 못했습니다. 나는 너의 설명에 대해 감사 할 것이다. – franza

+1

lookup_key는 본질적으로 contact_id의보다 정적 인 버전으로 작동합니다. 예를 들어 연락처로 작업하고 싶을 때 연락처 정보 대신이 정보를 사용합니다. 새로운 장치 설치에서 일관성을 유지할 수 있다고 판단 할 수 있기 때문입니다. 예를 들어 LOOKUP_KEY : contactsCursor = context.getContentResolver(). query (Uri.withAppendedPath (ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode (messageFromNumber)), new String [] {ContactsContract.PhoneLookup.DISPLAY_NAME , ContactsContract.PhoneLookup.LOOKUP_KEY}, null, null, null); – Andrew

관련 문제