在以编程方式将新联系人插入 phone in android 时获取 ContactId

Get ContactId at the time of inserting a new contact programmatically to phone in android

我正在尝试以编程方式获取新添加的联系人的 contactId。正在成功添加联系人并从 ContentProviderResult[] 获取 contactID 但是我得到的 contactId 是不是正确的。我也看到了 this and this 的回答,但是 contactId 不正确。这是我的代码

 ArrayList<ContentProviderOperation> contentProviderOperation = new ArrayList<>();
      ......
      ......

ContentProviderResult[] results = getActivity().getContentResolver().applyBatch(ContactsContract.AUTHORITY, contentProviderOperation);
long contactId = ContentUris.parseId(results[0].uri);

我也试过下面的代码:

ContentProviderResult[] results = getActivity().getContentResolver().applyBatch(ContactsContract.AUTHORITY, contentProviderOperation);
            Uri myContactUri = results[0].uri;

            int lastSlash = myContactUri.toString().lastIndexOf("/");
            int length = myContactUri.toString().length();
            int contactID = Integer.parseInt((String) myContactUri.toString().subSequence(lastSlash+1, length));

但是我得到的 contactId 不正确。如果我做错了什么,请纠正我。提前致谢。

在正常工作后,我找到了一种通过以下代码找出正确的 contactId 的方法:

public static int getContactIDFromNumber(String contactNumber, Context context) {
        contactNumber = Uri.encode(contactNumber);
        int phoneContactID = new Random().nextInt();
        Cursor contactLookupCursor = context.getContentResolver().query(Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, contactNumber), new String[]{ContactsContract.PhoneLookup.DISPLAY_NAME, ContactsContract.PhoneLookup._ID}, null, null, null);
        while (contactLookupCursor.moveToNext()) {
            phoneContactID = contactLookupCursor.getInt(contactLookupCursor.getColumnIndexOrThrow(ContactsContract.PhoneLookup._ID));
        }
        contactLookupCursor.close();

        return phoneContactID;
    }

传递 arrayList 中存在的新添加联系人的 contactId。 我知道这不是查找联系人的正确方法。但它对我有用。