Обновлено для использования не устаревшего кода. Запрос на основе этого ответа: Как читать контакты на Android 2.0
Cursor managedCursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);
Тогда нужно просто определить размер Курсора:
int size = managedCursor.getCount();
получите случайный, прочитайте его и проверьте, есть ли у него номера телефонов. Если нет, выберите другой:
boolean found = false;
Random rnd = new Random();
while(!found) {
int index = rnd.nextInt(size);
managedCursor.moveToPosition(index);
String name = managedCursor.getString(people.getColumnIndex(PhoneLookup.DISPLAY_NAME));
found = Boolean.parseBoolean(managedCursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)));
if (found) {
Cursor phones = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId, null, null);
while (phones.moveToNext()) {
String phoneNumber = phones.getString(phones.getColumnIndex( ContactsContract.CommonDataKinds.Phone.NUMBER));
Log.d("Phone found:", phoneNumber);
}
phones.close();
}
}
Я не понимаю, как вы могли бы выбрать случайный в противном случае. И это не должно замедлять работу телефона, если это не очень большой список контактов.
Теперь он проверяет наличие телефонных номеров и читает все из них, если найдены. Если нет, он выбирает другую запись.