2011-04-22 41 views
1

我想從手機的聯繫人列表中隨機接觸,但沒有明顯減慢的手機。這意味着我不能只抓住所有的聯繫人並將它們粘貼到一個數組中,並從該數組中隨機選取一個。我希望能夠獲得一個隨機的聯繫人,而不必首先獲得所有的聯繫人。 這是可能的,如果是這樣,我該如何去做呢?Android開隨機聯繫

回答

3

更新使用非棄用代碼。基於這個答案查詢:How to read contacts on 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(); 
    } 
} 

我不明白你怎麼可以選擇一個隨機的否則。這不應該減慢電話,除非它是一個非常大的聯繫人列表。

現在它會檢查電話號碼的存在,如果找到讀取所有的人。如果不是,則選擇另一個條目。

+0

這可能會工作,但Contact.People是貶值的,我寧可不使用折舊代碼。 – Elec0 2011-04-22 21:26:50

+0

@ Elec0非常真實。查看更新的回覆。主要部分(選擇一個隨機的聯繫人而沒有實際閱讀全部)仍然有效。 – Aleadam 2011-04-22 21:45:02

+0

非常真實,謝謝。 :) – Elec0 2011-04-22 23:12:00