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

标签 android android-contentprovider contacts

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

关于android - 在以编程方式将新联系人插入到 android 中的手机时获取 ContactId,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39971606/

相关文章:

android - 频繁更新 SQLite DB 和 Listview(效率)

c# - 如何使用 MonoTouch c# 以编程方式获取联系人?

ios - Digits - 匹配来自非 Digits 用户的联系人

java - 如何将倒计时器添加到 Firebase 中?

java - ProGuard 模拟异常

android - XML 解析适用于 Android 2.2、2.3 但不适用于 ICS

android - 多个应用程序使用相同的内容提供商

android - ContentProvider 用法

ios - 如何使用 Contacts with Swift 对联系人进行排序

android - android.support.v7.app.AlertController.RecycleListView 和 android.support.v7.widget.RecyclerView 的区别