在Android中加载联系人

在Android中加载联系人,android,android-contacts,Android,Android Contacts,我在网上搜索过,所以找不到合适的答案,因此我发布了以下内容 我想将手机中的联系人加载到我的应用程序中,以便导入电话号码。我想做什么 “Stacy C”有两个手机号码 “Stacy Jacob”有一个手机号码 现在,当我列出联系人时,我想要三行,下面列出姓名和号码。 我可以导入联系人,但不确定如何检查联系人的姓名是否有多个号码 它类似于WhatsApp应用程序。 我现在正在使用一个易于加载的游标来列出联系人。您需要为所有号码查询另一个uri。我给你举个例子。。你可以调查 private stati

我在网上搜索过,所以找不到合适的答案,因此我发布了以下内容

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

  • “Stacy C”有两个手机号码
  • “Stacy Jacob”有一个手机号码
  • 现在,当我列出联系人时,我想要三行,下面列出姓名和号码。 我可以导入联系人,但不确定如何检查联系人的姓名是否有多个号码

    它类似于WhatsApp应用程序。
    我现在正在使用一个易于加载的游标来列出联系人。

    您需要为所有号码查询另一个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;
        }
    
    private static final String[]CONTACTS\u PROJECTION=new String[]{
    联系人。\u ID,
    Contacts.HAS_电话号码
    };
    私有静态最终字符串[]电话\投影=新字符串[]{
    电话号码,
    电话号码
    };
    私有void readAllContact(){
    游标mCursor=mResolver.query(Contacts.CONTENT\u URI,Contacts\u PROJECTION,null,null);
    while(mCursor.moveToNext()){
    String id=mCursor.getString(mCursor.getColumnIndex(Contacts.\u id));
    //查询此联系人的电话号码。
    if(Integer.parseInt(mCursor.getString(mCursor.getColumnIndex(Contacts.HAS_PHONE_NUMBER)))>0{
    ArrayList number=GetPhoneNumber(id);
    }否则{
    日志d(标签“没有与此联系人相关的电话”);
    }
    }
    }
    私有ArrayList GetPhoneNumber(字符串id){
    ArrayList结果=新建ArrayList();
    游标mCursorPhones=mResolver.query(Phone.CONTENT\u URI,
    这是我们的投影,
    Phone.CONTACT_ID+“=?”,
    新字符串[]{id},
    无效);
    while(mCursorPhones.moveToNext()){
    //阅读电话类型
    //getString(mCursorPhones.getColumnIndex(Phone.TYPE));
    //阅读电话
    add(mCursorPhones.getString(mCursorPhones.getColumnIndex(ContactsContract.CommonDataTypes.Phone.NUMBER));
    }
    mCursorPhones.close();
    返回结果;
    }
    
    为了显示尽可能多的行数,您必须实现自己的逻辑。您可以根据编号创建条目

    @StackOverflowUser此处