在android中以编程方式向手机插入新联系人时获取ContactId



我试图以编程方式获得新添加的联系人的contactId。Contact正在成功添加,并从ContentProviderResult[]获取contactID,但contactID我得到的不是正确的。我也看到了这个和这个答案,但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。我知道这不是找到联系人的正确方法。

最新更新