如何在android中添加新联系人后获取联系人ID?

时间:2014-07-14 20:25:11

标签: android android-contacts android-syncadapter

我使用以下代码添加到手机中的新联系人。

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 才能更新。

我可以从上面的代码中获取联系人ID吗?。如果有人知道你的答案。

如果有任何问题或意见也欢迎。谢谢你的回答。

3 个答案:

答案 0 :(得分:2)

试试这段代码,

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));

我希望这段代码可以帮助你......

答案 1 :(得分:1)

您对操作列表执行的批量插入将返回结果列表(我认为是URI,但是我这样做了几个月),我相信您可以从第一个中获取所需的ID结果

 long rawContactId = ContentUris.parseId(rawContactUri);

答案 2 :(得分:0)

申请徽章并收到您收到的最后一段后: ContactsContract.RawContacts._ID 如果你想获得Contact_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;