내가 MIME-TYPE
에 의해 휴대 전화에서 연락처를 가져 오기 위해 노력하고, 그래서 난 종류가 연락처를 선택할 수 있습니다선택 연락처
ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE
을 내가 사용하는 방법
public static ArrayList<Contact> fetchContactsFromPhone(@NonNull Context context) {
ArrayList<Contact> contacts = new ArrayList<>();
Uri CONTENT_URI = ContactsContract.Contacts.CONTENT_URI;
String _ID = ContactsContract.Contacts._ID;
String DISPLAY_NAME = ContactsContract.Contacts.DISPLAY_NAME;
String HAS_PHONE_NUMBER = ContactsContract.Contacts.HAS_PHONE_NUMBER;
Uri PhoneCONTENT_URI = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String Phone_CONTACT_ID = ContactsContract.CommonDataKinds.Phone.CONTACT_ID;
String NUMBER = ContactsContract.CommonDataKinds.Phone.NUMBER;
ContentResolver contentResolver = context.getContentResolver();
Cursor cursor = contentResolver.query(CONTENT_URI, null, null, null, null);
if (cursor != null && cursor.getCount() > 0) {
while (cursor.moveToNext()) {
String contact_id = cursor.getString(cursor.getColumnIndex(_ID));
String name = cursor.getString(cursor.getColumnIndex(DISPLAY_NAME));
long hasPhoneNumber = Long.parseLong(cursor.getString(cursor.getColumnIndex(HAS_PHONE_NUMBER)));
if (hasPhoneNumber > 0) {
Cursor phoneCursor = contentResolver.query(
PhoneCONTENT_URI,
null,
Phone_CONTACT_ID + " = " + contact_id + " AND " + ContactsContract.Data.MIMETYPE + " = " + "'"+ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE+"'"
, null, null);
if (phoneCursor != null) {
while (phoneCursor.moveToNext()) {
Contact contact = new Contact();
String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(NUMBER));
phoneNumber = phoneNumber.replaceAll("[()\\-\\s]", "").trim();
contact.setName(name);
contact.setPhoneNum(phoneNumber);
contacts.add(contact);
}
phoneCursor.close();
}
}
}
cursor.close();
}
//return data
return contacts;
}
이 쿼리는 ZERO 연락처를 반환합니다.
어떤 아이디어가 필요한가요?
'제로'결과를 얻는 것과 성능을 향상시키는 문제를 해결할 때 답을 수락합니다. 감사합니다. 그러나 MIME-TYPE으로 필터링하는 조건은 동일한 계정의 다른 연락처를 가져 오는 결과로 다른 계정 [WhatsApp account for ex]에 속하지 않는 연락처를 가져 오는 중입니다. 또한 내 애플 리케이션은 WhatsApp와 같은 연락처를 추가하므로 많은 계정에서 많은 중복 된 연락처를 가져 오는 중입니다! 이걸 극복하는 방법에 대한 아이디어가 있습니까? –
아래 답변 한 코드에서 언급했듯이 하나의 계정 (예 : Google)에서 선택할 때도 하나 이상의 번호가있는 연락처가 중복되므로 계정별로 필터링하면 도움이되지 않습니다. 'ArrayList'를'HashMap'으로 변경해야합니다. 여기서 키는'CONTACT_ID'이고, 동일한 연락처에 속한 여러 숫자를 하나의'Contact' 객체 내에 넣어야합니다. – marmor
예, 맞았습니다!, 고맙습니다. 도움 :) –