如何在android中获取Contact的公司名称

时间:2017-09-17 12:00:49

标签: android

我正在尝试将联系人导入到我的应用中,但却在努力获取公司名称。这是我的代码:

 public List<ContactItem> getContactList(){
    ArrayList<ContactItem> contactList = new ArrayList<ContactItem>();

    Uri contactUri = ContactsContract.Contacts.CONTENT_URI;
    String[] PROJECTION = new String[] {
            ContactsContract.Contacts._ID,
            ContactsContract.Contacts.DISPLAY_NAME,
            ContactsContract.Contacts.HAS_PHONE_NUMBER,
    };
    String SELECTION = ContactsContract.Contacts.HAS_PHONE_NUMBER + "='1'";
    Cursor contacts = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, PROJECTION, SELECTION, null, null);


    if (contacts.getCount() > 0)
    {
        while(contacts.moveToNext()) {
            ContactItem aContact = new ContactItem();
            int idFieldColumnIndex = 0;
            int nameFieldColumnIndex = 0;
            int numberFieldColumnIndex = 0;
            int companyFieldColumnIndex = 0;

            String contactId = contacts.getString(contacts.getColumnIndex(ContactsContract.Contacts._ID));

            nameFieldColumnIndex = contacts.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME);

            if (nameFieldColumnIndex > -1)
            {
                aContact.setName(contacts.getString(nameFieldColumnIndex));
            }

            // Tried to get a company, but
            // this always returns -1
            companyFieldColumnIndex = contacts.getColumnIndex(ContactsContract.CommonDataKinds.Organization.COMPANY);
            if (companyFieldColumnIndex > -1)
            {
                Log.d(TAG, "getContactList: starts");
                aContact.setCompany(contacts.getString(companyFieldColumnIndex));
            }


            PROJECTION = new String[] {ContactsContract.CommonDataKinds.Phone.NUMBER};
            final Cursor phone = managedQuery(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, PROJECTION, ContactsContract.Data.CONTACT_ID + "=?", new String[]{String.valueOf(contactId)}, null);
            if(phone.moveToFirst()) {
                while(!phone.isAfterLast())
                {
                    numberFieldColumnIndex = phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);

                    if (numberFieldColumnIndex > -1)
                    {
                        aContact.setPhoneNum(phone.getString(numberFieldColumnIndex));
                        phone.moveToNext();
                        TelephonyManager mTelephonyMgr;
                        mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
                        if (!mTelephonyMgr.getLine1Number().contains(aContact.getPhoneNum()))
                        {
                            contactList.add(aContact);
                        }
                    }
                }
            }
            phone.close();
        }

        contacts.close();
    }

    return contactList;
}

我在我的代码中添加注释,我试图获取联系人的公司名称,但我总是得到-1。有些联系人有公司名称,所以这部分代码有问题。如何正确地获得公司?

1 个答案:

答案 0 :(得分:1)

首先,您传递的投影并不包含与公司名称相关的任何内容,因此您当然不会得到它。

我不确定的其他事情是,您需要通过联系人的RawId而不是ID来获取公司名称。这是你应该怎么做的事,

String contactId = contacts.getString(contacts.getColumnIndex(ContactsContract.Contacts._ID));
String rawContactId = getRawContactId(contactId);
String companyName = getCompanyName(rawContactId);

&安培;以下是您需要的功能:

private String getRawContactId(String contactId) {
        String[] projection = new String[]{ContactsContract.RawContacts._ID};
        String selection = ContactsContract.RawContacts.CONTACT_ID + "=?";
        String[] selectionArgs = new String[]{contactId};
        Cursor c = mContentResolver.query(ContactsContract.RawContacts.CONTENT_URI, projection, selection, selectionArgs, null);
        if (c == null) return null;
        int rawContactId = -1;
        if (c.moveToFirst()) {
            rawContactId = c.getInt(c.getColumnIndex(ContactsContract.RawContacts._ID));
        }
        c.close();
        return String.valueOf(rawContactId);

    }

private String getCompanyName(String rawContactId) {
        try {
            String orgWhere = ContactsContract.Data.RAW_CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?";
            String[] orgWhereParams = new String[]{rawContactId,
                    ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE};
            Cursor cursor = mContentResolver.query(ContactsContract.Data.CONTENT_URI,
                    null, orgWhere, orgWhereParams, null);

            if (cursor == null) return null;
            String name = null;
            if (cursor.moveToFirst()) {
                name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Organization.COMPANY));
            }
            cursor.close();
            return name;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }

    }
相关问题