"contactID"ID를 가진 연락처에 속한 하나의 전화 번호를 검색하기 위해 다음 함수를 작성했습니다.Android에서 ContactsContract가있는 전화 번호 검색 - 기능이 작동하지 않습니다.
전화 번호를 검색하는 것입니다 기능 :
private String getContactPhone(String contactID) {
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String[] projection = null;
String where = ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?";
String[] selectionArgs = new String[] { contactID };
String sortOrder = null;
Cursor result = managedQuery(uri, projection, where, selectionArgs, sortOrder);
if (result.moveToFirst()) {
String phone = result.getString(result.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
if (phone == null) {
result.close();
return null;
}
result.close();
return phone;
}
result.close();
return null;
}
이 함수가 호출되는 방법 : 불행하게도
ArrayList<Contact> resultContacts = new ArrayList<Contact>();
Cursor result = null;
Uri uri = ContactsContract.Data.CONTENT_URI;
String[] projection = new String[] {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Event.CONTACT_ID,
ContactsContract.CommonDataKinds.Event.START_DATE,
};
String where = ContactsContract.Data.MIMETYPE+" = ? AND "+ContactsContract.CommonDataKinds.Event.TYPE+" = "+ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY;
String[] selectionArgs = new String[] {ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE};
String sortOrder = null;
result = managedQuery(uri, projection, where, selectionArgs, sortOrder);
while (result.moveToNext()) {
Long id = result.getLong(result.getColumnIndex(ContactsContract.Contacts._ID));
String phone = getContactPhone(String.valueOf(id));
...
}
...
, 그것은 작동하지 않습니다. 이 함수를 "ContactsContract.Contacts._ID"에서 가져온 값으로 호출하면 null이됩니다. 이게 왜 그렇게? 뭐가 잘못 되었 니?
편집 : - 작동하지 않았다 나는 CommonDataKinds.Phone.CONTACT_ID에 Contacts._ID를 매핑하는 데 사용. 하지만 이제는 Contacts.DISPLAY_NAME을 CommonDataKinds.Phone.DISPLAY_NAME에 매핑하고 갑자기 작동합니다. 이상하지 않습니까? 하지만 표시 이름 대신 ID를 매핑하는 것이 좋습니다. 그래서 문제는 여전히 화제입니다. 이 테이블에있는 다른 ID 때문일 수 있습니까? 이 이유가 조회 ID가 있습니까?
연락처가 하나만 있다고 확인 했습니까? – tidbeck
예, 첫 번째 쿼리의 결과 커서를 반복하면서 모든 연락처에 전화 번호를 가져 오려고합니다. 연락처가 두 개인 경우 표시 이름과도 작동하지 않습니다. – caw
'contactId'를 얻는 방법을 보여줄 수있어서 내가이 자기를 시도 할 수 있을까요? – tidbeck