2011-04-07 3 views
4

최근에 내 앱용 동기화 어댑터를 만들었습니다. 휴대 전화의 연락처와 웹 요청을 통해 연락하는 연락처가 동기화됩니다. 연락처를 추가하는 데 아무런 문제가 없지만 연락처 정보가 변경되면 올바르게 업데이트되도록 연락처 정보를 가져올 수 없습니다. 예를 들어 연락처의 회사 이름 필드.Android 연락처를 업데이트하는 방법은 무엇입니까?

안드로이드 문서에 의해 제안 나는 또한 일괄 적으로이 일을 시도
 ContentValues values = new ContentValues(); 
    values.put(ContactsContract.CommonDataKinds.Organization.COMPANY, "New Company"); 
context.getContentResolver().update(Uri.parse("content://com.android.contacts/data/"), values, BaseColumns._ID + "=?", new String[] { String.valueOf(id) }); 

:

- (정확하게 어떤 접촉 업데이트가 아니라 즉,) 여기에서 일을하거나 부분적으로 만 작동하지 않았다 나는 시도 몇 가지 예를 들어 쿼리입니다
builder = ContentProviderOperation 
      .newUpdate(ContactsContract.Data.CONTENT_URI); 
    builder.withSelection(BaseColumns._ID + " =?", new String[]{String.valueOf(id)}); 

    builder.withValue(
      ContactsContract.CommonDataKinds.Organization.COMPANY, 
      "New Company Name!"); 
    operationList.add(builder.build()); 

나는 ContactContracts Documentation을 읽었으며 원래 다음과 같습니다. tutorial. 또한 API의 AuthenticatorActivity 예제를 확인해 보았습니다. 어떤 도움이라도 대단히 감사합니다.

답변

9

올바른 쿼리를 찾기 위해 많은 노력을 기울인 후 나는 그 대답을 발견했다고 생각합니다. BaseColumns._IDContactsContract.Data.CONTACT_ID으로 변경해야하고, 내가 작성한 각 업데이트에 대해 마임 유형을 제공해야하며 안드로이드 설명서에서 아무 것도 볼 수 없었습니다. 이 글을 쓸 때 많은 도움이되었습니다. Working With Android Contacts

 String orgWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
    String[] orgWhereParams = new String[]{String.valueOf(id), 
     ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE}; 
    operationList 
    .add(ContentProviderOperation 
      .newUpdate(ContactsContract.Data.CONTENT_URI) 
      .withSelection(orgWhere, orgWhereParams) 
      .withValue(
        ContactsContract.CommonDataKinds.Organization.DATA, 
        guCon.getCompany()).build()); 
+2

고맙습니다. NINJASENSE –