繁体   English   中英

Android联系人电话号码获取重复项

[英]Android Contact Phone Numbers fetching Duplication

我可以获取每个联系人的联系人和电话号码,但是电话号码是重复的,我认为有些选项可以显示与其他应用程序(如Viber等)链接的联系人,因此联系人可以检索重复的联系人

如何避免选择每个联系人的重复号码?

尝试这个

 Intent intent = new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI);
 startActivityForResult(intent, 3);
 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 3) {
        if (resultCode == RESULT_OK) {
            Uri contactData = data.getData();
            contactNumber = "";
            Cursor cursor = getContentResolver().query(contactData, null, null, null, null);
            cursor.moveToFirst();
            String hasPhone = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.HAS_PHONE_NUMBER));
            String contactId = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
            if (hasPhone.equals("1")) {
                Cursor phones = getContentResolver().query
                        (ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
                                ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                                        + " = " + contactId, null, null);
                while (phones.moveToNext()) {
                    contactNumber = phones.getString(phones.getColumnIndex
                            (ContactsContract.CommonDataKinds.Phone.NUMBER)).replaceAll("[-() ]", "");
                    contactName=phones.getString(phones.getColumnIndex
                            (ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));


                }
                phones.close();

并告诉我这是否解决了您的问题。 :)

我通过使用哈希图解决了这个问题。 您已将设备ID的哈希图映射到电话号码。 您将每个数字添加到哈希图中,然后检查哈希图是否不包含该设备ID。

通过查询以下URI获取设备ID。

Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String[] projection = new String[]{ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
            ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.PHOTO_URI, ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME};

Hashmap<String , Contact > = new Hashmap<String , Contact>();

if (contactHashMap.containsKey(id)) {
   // skip that contact.
}
else {
    //fill your contact object.
    // get device id of contact from mobile                     
       contactHashMap.put(id, contact);
}

这样,您可以避免重复。 还有另一种查询其他表的方法,该表为设备ID提供了编号。 但这花费了您两个查询。 上面的hashmap方法是有效的,对我来说效果很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM