在Android中加载联系人

时间:2013-06-08 09:43:05

标签: android android-contacts

我搜索了互联网,因此无法找到合适的答案,因此发布了以下内容。

我想将手机中的联系人加载到我的应用程序中,我可以导入电话号码。我想做什么。

  1. “Stacy C”有两个手机号码
  2. “Stacy Jacob”有一个手机号码
  3. 现在,当我列出联系人时,我想要三行,其中包含名称和下面列出的数字。 我可以导入联系人,但不知道如何检查联系人的姓名是否有多个号码。

    类似于WhatsApp应用程序。 我正在使用一个容易加载的光标来立即列出联系人。

1 个答案:

答案 0 :(得分:3)

您需要为所有数字查询另一个uri。我给你举个例子......你可以看看

private static final String[] CONTACTS_PROJECTION = new String[] {
            Contacts._ID,
            Contacts.HAS_PHONE_NUMBER
    };

    private static final String[] PHONES_PROJECTION = new String[] {
            Phone.TYPE,
            Phone.NUMBER
    };

    private void readAllContact() {
        Cursor mCursor = mResolver.query(Contacts.CONTENT_URI, CONTACTS_PROJECTION, null, null, null);
        while (mCursor.moveToNext()) {
            String id = mCursor.getString(mCursor.getColumnIndex(Contacts._ID));
            // Query phone numbers for this contact.
            if (Integer.parseInt(mCursor.getString(mCursor.getColumnIndex(Contacts.HAS_PHONE_NUMBER))) > 0) {
                ArrayList<String> numbers = getPhoneNumbers(id);

            } else {
                Log.d(TAG, "No phones associated with this Contact");
            }
        }
    }

    private ArrayList<String> getPhoneNumbers(String id) {
        ArrayList<String> result = new ArrayList<String>();
        Cursor mCursorPhones = mResolver.query(Phone.CONTENT_URI,
                PHONES_PROJECTION,
                Phone.CONTACT_ID + " = ?",
                new String[]{id},
                null);
        while (mCursorPhones.moveToNext()) {
            //Read type of phone
            //mCursorPhones.getString(mCursorPhones.getColumnIndex(Phone.TYPE));
            //Read Phone
            result.add(mCursorPhones.getString(mCursorPhones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));
        }
        mCursorPhones.close();
        return  result;
    }

为了显示行数,你必须实现自己的逻辑。您可以根据编号创建条目。