【发布时间】:2011-08-11 04:34:31
【问题描述】:
我正在尝试从手机的联系人列表中随机获取一个联系人,但没有明显减慢手机速度。这意味着我不能只抓取所有联系人并将它们放入一个数组中并从该数组中随机选择一个。我希望能够获得随机联系人,而不必先获得所有联系人。 这可能吗?如果可以,我将如何去做?
【问题讨论】:
标签: android arrays random contacts
我正在尝试从手机的联系人列表中随机获取一个联系人,但没有明显减慢手机速度。这意味着我不能只抓取所有联系人并将它们放入一个数组中并从该数组中随机选择一个。我希望能够获得随机联系人,而不必先获得所有联系人。 这可能吗?如果可以,我将如何去做?
【问题讨论】:
标签: android arrays random contacts
更新为使用非弃用代码。根据这个答案查询:How to read contacts on Android 2.0
Cursor managedCursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);
那么只需要获取Cursor的大小即可:
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();
}
}
我看不出你怎么能随机选择一个。除非它是一个非常大的联系人列表,否则这不会减慢电话速度。
现在它会检查电话号码是否存在,如果找到就会读取所有电话号码。如果不是,它会选择另一个条目。
【讨论】: