Android Получить Случайный Контакт - PullRequest
1 голос
/ 22 апреля 2011

Я пытаюсь получить случайный контакт из списка контактов телефона, но без заметного замедления работы телефона.Это означает, что я не могу просто взять все контакты, вставить их в массив и выбрать случайный из этого массива.Я хотел бы иметь возможность получить случайный контакт без необходимости сначала получить все контакты.Возможно ли это, и если да, то как мне это сделать?

1 Ответ

3 голосов
/ 23 апреля 2011

Обновлено для использования не устаревшего кода. Запрос на основе этого ответа: Как читать контакты на 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();
  }
}

Я не понимаю, как вы могли бы выбрать случайный в противном случае. И это не должно замедлять работу телефона, если это не очень большой список контактов.

Теперь он проверяет наличие телефонных номеров и читает все из них, если найдены. Если нет, он выбирает другую запись.

...