2014-07-14 5 views
-2

전화에 추가 된 새 연락처에 다음 코드를 사용합니다.android에 새 연락처를 추가 한 후 연락처 ID를 얻는 방법은 무엇입니까?

private static void addContact(Account account, String name, String username,String phone,String email) { 

    Log.i(TAG, "Adding contact: " + name); 
    ArrayList<ContentProviderOperation> operationList = new ArrayList<ContentProviderOperation>(); 
    ContentProviderOperation.Builder builder = ContentProviderOperation.newInsert(RawContacts.CONTENT_URI); 
    builder.withValue(RawContacts.ACCOUNT_NAME, account.name); 
    builder.withValue(RawContacts.ACCOUNT_TYPE, account.type); 
    builder.withValue(RawContacts.SYNC1, username); 
    operationList.add(builder.build()); 

//NAME adding area 
    builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI); 
    builder.withValueBackReference(ContactsContract.CommonDataKinds.StructuredName.RAW_CONTACT_ID, 0); 
    builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE); 
    builder.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name); 
    operationList.add(builder.build()); 

// Phone Number adding area 
    builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI); 
    builder.withValueBackReference(ContactsContract.CommonDataKinds.StructuredName.RAW_CONTACT_ID, 0); 
    builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); 
    builder.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phone); 
    builder.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_WORK); 
    operationList.add(builder.build()); 
    } 

이 코드는 새 연락처를 추가하는 데 적합합니다.

연락처를 서버에서 전화로 업데이트하고 싶습니다. 그래서 업데이트 목적으로 연락 정보 ID이 필요합니다.

위 코드에서 담당자 정보를 얻을 수 있습니까?. 누군가가 당신의 대답을 공유한다면.

질문이나 의견도 환영합니다. 귀하의 답변에 감사드립니다.

답변

2

이 코드를 사용해보십시오, 당신은받을 :당신이이 쿼리해야 Contact_id을 얻고 싶은 경우에은 을 ContactsContract.RawContacts._ID :

을 (ROWID를 - 당신이 전에받은 마지막 세그먼트) 내가 연락처를 하나씩 삽입

String[] projections = new String[]{ContactsContract.RawContacts.CONTACT_ID}; 
String select = ContactsContract.RawContacts._ID + "= ?"; 
String[] selectionArgs = new String[]{rowId}; 
Cursor cursor = context.getContentResolver().query(ContactsContract.RawContacts.CONTENT_URI, projections, select, selectionArgs, null); 
    String contactId = null; 
    if (cursor.getCount() == 0) { 
      Log.d("aaa","Couldn't find row: " + rowId); 
      return null; 
    } 

    if (cursor.moveToNext()) { 
     int columnIndex; 
     columnIndex = cursor.getColumnIndex(ContactsContract.RawContacts.CONTACT_ID); 
     if (columnIndex == -1) { 
       Log.d("aaa","Couldn't get contact id"); 
     } else { 
       contactId = cursor.getString(columnIndex); 
     } 
    } 

    cursor.close(); 
    return contactId; 
1

작업 목록에서 수행하는 대량 삽입은 결과 목록 (내가 생각한 URI이지만 내가이 작업을한지 몇 개월이 지났음)을 반환합니다. 첫 번째 ID에서 원하는 ID를 얻을 수 있다고 생각합니다. 나는 배지를 적용한 후이 코드 도움을 당신에게 ...

+0

가. 삽입 할 수 없습니다. – stacktry

+0

URL이 아니라 URI입니다. :) – Leonardo

+0

작업 목록을 사용 중입니다. 대량 쿼리 (배치를 적용해야 함) –

0

희망과 마지막 세그먼트를받을

ContentProviderResult[] res = getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 

Uri myContactUri = res[0].uri; 
int lastSlash = myContactUri.toString().lastIndexOf("/"); 
int length = myContactUri.toString().length(); 
int contactID = Integer.parseInt((String) myContactUri.toString().subSequence(lastSlash+1, length)); 

이러한 결과

long rawContactId = ContentUris.parseId(rawContactUri);