Android根据手机号码和显示名称获得不同的联系人

Android根据手机号码和显示名称获得不同的联系人,android,android-contentprovider,android-contacts,android-cursor,Android,Android Contentprovider,Android Contacts,Android Cursor,我试图根据电话号码和姓名获得不同的联系人。我得到了所有的联系,但得到了重复。这是我的密码 Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; String[] projection = { ContactsContract.Data.CONTACT_ID, ContactsContract.Data.DISPLAY_NAME, Contac

我试图根据电话号码和姓名获得不同的联系人。我得到了所有的联系,但得到了重复。这是我的密码

  Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;

    String[] projection = {
            ContactsContract.Data.CONTACT_ID,
            ContactsContract.Data.DISPLAY_NAME,
            ContactsContract.Data.DATA1
    };


Cursor phones = getContentResolver().query(
                uri, projection,ContactsContract.Data.MIMETYPE + "='" + `ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE + "' AND " + ContactsContract.Data.DATA1 + "!=''", null, null);// uri, projection,selection+ ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE + "' AND " + ContactsContract.Data.DATA1 + "!=''", null, null);`
if (phones.moveToFirst()) {

            do {
                long ID = phones.getLong(phones.getColumnIndex(projection[0]));
                String DisplayName = phones.getString(phones.getColumnIndex(projection[1]));
                String Key = phones.getString(phones.getColumnIndex(projection[2]));

                if (Key != null && Key.toString().trim().length() > 0 && (Key.startsWith("0") || Key.startsWith("+"))) {
                    ContactBean contactModel = new ContactBean(DisplayName, Key, "");



                    list.add(contactModel);
                } else {
                    // No number!!
                }
            } while (phones.moveToNext());
        }
任何帮助,以获得不同的联系

我的预测已经对它进行了区分。当我尝试像这样对它应用不同的查询时

  String selection = " 'SELECT DISTINCT " + ContactsContract.Data.DISPLAY_NAME+"'";
我犯了这个错误

SELECT DISTINCT contact_id, display_name, data1 FROM view_data_restricted data LEFT OUTER JOIN (SELECT data_usage_stat.data_id as STAT_DATA_ID, SUM(data_usage_stat.times_used) as times_used, MAX(data_usage_stat.last_time_used) as last_time_used FROM data_usage_stat GROUP BY data_usage_stat.data_id) as data_usage_stat ON (STAT_DATA_ID=data._id) WHERE (1) AND (( 'SELECT DISTINCT contact_id'mimetype='vnd.android.cursor.item/phone_v2' AND data1!=''))
这表明我的投影已经应用了一个选择。但为什么它不起作用。有什么解决方案吗?

//设置为全局
// set as global
Set<string> phonenumbersList = new HashSet<string>();

            Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
            while (phones.moveToNext())
            {
            String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
            String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

            //contact has name number and phonenumber does not exists in list
            if ( phoneNumber != null && name != null && !phonenumbersList.contains(phoneNumber)){ 
                planets = new ContactsList[]{ new ContactsList(name, phoneNumber) };

                phonenumbersList.add(phoneNumber);
                planetList.addAll(Arrays.asList(planets));
                planetList.Add(phoneNumber, name);
            }
            }
            phones.close();
Set phonenumbersList=新HashSet(); 游标phones=getContentResolver().query(ContactsContract.CommonDataTypes.Phone.CONTENT\u URI,null,null,null); while(phones.moveToNext()) { 字符串名称=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataTypes.Phone.DISPLAY_name)); String phoneNumber=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataTypes.Phone.NUMBER)); //联系人的姓名和电话号码不在列表中 如果(phoneNumber!=null&&name!=null&&!phonenumbersList.contains(phoneNumber)){ planets=新联系人列表[]{新联系人列表(姓名、电话号码)}; 电话号码列表。添加(电话号码); planetList.addAll(Arrays.asList(planets)); planetList.Add(电话号码、姓名); } } 电话。关闭();

获取电话号码和联系人姓名的简便方法

已经尝试过了这一点,这对你有用吗?