There are a lot of discussions going on about the same subject, but after spending 4 hours here, I could not find a valid description or a link to make a Contact Picker with
I use this code in onClick:
long[] id = getListView().getCheckedItemIds();// i get the checked contact_id instead of position
phoneNumber = new String[id.length];
for (int i = 0; i < id.length; i++) {
phoneNumber[i] = getPhoneNumber(id[i]); // get phonenumber from selected id
}
Intent pickContactIntent = new Intent();
pickContactIntent.putExtra("PICK_CONTACT", phoneNumber);// Add checked phonenumber in intent and finish current activity.
setResult(RESULT_OK, pickContactIntent);
finish();
//
private String getPhoneNumber(long id) {
String phone = null;
Cursor phonesCursor = null;
phonesCursor = queryPhoneNumbers(id);
if (phonesCursor == null || phonesCursor.getCount() == 0) {
// No valid number
signalError();
return null;
} else if (phonesCursor.getCount() == 1) {
// only one number, call it.
phone = phonesCursor.getString(phonesCursor
.getColumnIndex(Phone.NUMBER));
} else {
phonesCursor.moveToPosition(-1);
while (phonesCursor.moveToNext()) {
// Found super primary, call it.
phone = phonesCursor.getString(phonesCursor
.getColumnIndex(Phone.NUMBER));
break;
}
}
return phone;
}
private Cursor queryPhoneNumbers(long contactId) {
ContentResolver cr = getContentResolver();
Uri baseUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI,
contactId);
Uri dataUri = Uri.withAppendedPath(baseUri,
ContactsContract.Contacts.Data.CONTENT_DIRECTORY);
Cursor c = cr.query(dataUri, new String[] { Phone._ID, Phone.NUMBER,
Phone.IS_SUPER_PRIMARY, RawContacts.ACCOUNT_TYPE, Phone.TYPE,
Phone.LABEL }, Data.MIMETYPE + "=?",
new String[] { Phone.CONTENT_ITEM_TYPE }, null);
if (c != null && c.moveToFirst()) {
return c;
}
return null;
}
And the last onActivityResult of activity which you start PickContactsActivity
// TODO Auto-generated method stub
// super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == Constants.REQUEST_CODE_PICK_CONTACT) {
if (data != null) {
String[] temp = data.getStringArrayExtra("PICK_CONTACT");
}
}
}
}