【问题标题】:Fetching all details of a contact with the help of contact ID借助联系人 ID 获取联系人的所有详细信息
【发布时间】:2017-12-17 15:26:01
【问题描述】:

我确实有可用的联系人 ID。有没有办法可以获取联系人的所有详细信息(在联系人 ID 的帮助下)?

Stack Over flow 上已经有一个 question 存在同样的问题,但答案似乎已经过时并且不再有效。

【问题讨论】:

    标签: android contacts android-contacts


    【解决方案1】:

    代码 sn-p 用于使用联系人 ID 获取联系人的所有详细信息。

    public static ModelContact getContactDetails(final Context context, String contactId) {
    
            ModelContact contact = new ModelContact();
            contact.setContactId(contactId);
    
            Cursor cursor = context.getContentResolver().query(ContactsContract.Data.CONTENT_URI,
                    new String[]{ContactsContract.Data._ID,
                            ContactsContract.Data.MIMETYPE,
                            ContactsContract.Data.DISPLAY_NAME,
                            ContactsContract.Data.RAW_CONTACT_ID,
                            ContactsContract.Data.LOOKUP_KEY,
                            ContactsContract.Data.DATA1,
                            ContactsContract.Data.DATA2,
                            ContactsContract.Data.DATA3,
                            ContactsContract.Data.DATA4,
                            ContactsContract.Data.DATA5,
                            ContactsContract.Data.DATA6,
                            ContactsContract.Data.DATA7,
                            ContactsContract.Data.DATA8,
                            ContactsContract.Data.DATA10},
    
                    ContactsContract.Data.CONTACT_ID + "=?" + " AND "
                            + "(" + ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE + "' OR "
                            + ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE + "' OR "
                            + ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE + "' OR "
                            + ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE + "' OR "
                            + ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE + "')",
                    new String[]{contactId}, null);
    
            if (cursor != null && cursor.getCount() > 0) {
    
                while (cursor.moveToNext()) {
                    String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.DISPLAY_NAME));
                    contact.setDisplayName(displayName);
                    String rowContactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.RAW_CONTACT_ID));
                    contact.setRawContactId(rowContactId);
                    String lookUpKey = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.LOOKUP_KEY));
                    contact.setLookupKey(lookUpKey);
    
                    String mimeType = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.MIMETYPE));
                    if (mimeType.equals(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)) {
                        setPhoneList(cursor, contact);
                    } else if (mimeType.equals(ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)) {
                        setEmailList(cursor, contact);
                    } else if (mimeType.equals(ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)) {
                        setStructuredName(cursor, contact);
                    } else if (mimeType.equals(ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE)) {
                        setOrganization(cursor, contact);
                    } else if (mimeType.equals(ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE)) {
                        setAddress(cursor, contact);
                    }
                }
    
                cursor.close();
            }
            return contact;
        }
    

    更多详情请查看以下链接。

    ContactHelper.java

    希望对你有帮助。

    【讨论】:

    • 正在调查。谢谢
    • 一个问题哥们,你如何访问getPhoneList()的标签和值?当我试图获得像 result.get(indexValue).label 这样的标签时,它在调试器中工作正常,但 android studio 在编译时出现错误。
    • @SanjayJoshi 您的意思是从 ModelContact object.getPhoneList() 方法中获取标签吗?你能发布你得到编译时间的错误吗?
    • @PiyushMalaviya:您能帮我获取联系人的主要号码吗?当我尝试执行“cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.IS_PRIMARY);”在您的“setPhoneList”方法中,它总是为所有号码返回“-1”(即使是主号码)。有没有办法从现有光标(在 setPhoneList 方法本身)中知道主号码?
    猜你喜欢
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-11
    • 2014-12-21
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多