我想將所有聯繫人的電話號碼保存在ArrayList中,但我找不到方法。有沒有辦法讓他們,而不是通過ContactsContract一個接一個地挑選他們?Android獲取ArrayList中的所有聯繫人電話號碼
回答
ContentResolver cr = mContext.getContentResolver(); //Activity/Application android.content.Context
Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
if(cursor.moveToFirst())
{
ArrayList<String> alContacts = new ArrayList<String>();
do
{
String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
if(Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)
{
Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",new String[]{ id }, null);
while (pCur.moveToNext())
{
String contactNumber = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
alContacts.add(contactNumber);
break;
}
pCur.close();
}
} while (cursor.moveToNext()) ;
}
謝謝!有效! – 2013-03-07 02:21:29
什麼是'contResv'? – tipycalFlow 2013-03-30 15:23:44
contResv是ContentResolver的一個實例,你可以通過調用類android.content.Context的getContentResolver()方法來獲取 – Santhosh 2013-04-02 04:43:18
試試這個:
Cursor managedCursor = getContentResolver()
.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
new String[] {Phone._ID, Phone.DISPLAY_NAME, Phone.NUMBER}, null, null, Phone.DISPLAY_NAME + " ASC");
並通過光標穿越,你可以存儲在你選擇的任何數據結構,所有這些數據。
這是迄今爲止最快的解決方案。 – milosmns 2016-10-19 16:49:56
我不明白爲什麼其他答案與雙循環無處不在,而這種解決方案是非常清潔! – 2017-12-11 21:17:26
試試這個也得到所有聯繫人。
Cursor cursor = context.getContentResolver().query(Phone.CONTENT_URI, null , null , null,
"upper("+Phone.DISPLAY_NAME + ") ASC");
此代碼的工作速度比答案中的代碼快得多,因爲您不需要爲每個聯繫人進行額外的查詢。
private static final String CONTACT_ID = ContactsContract.Contacts._ID;
private static final String HAS_PHONE_NUMBER = ContactsContract.Contacts.HAS_PHONE_NUMBER;
private static final String PHONE_NUMBER = ContactsContract.CommonDataKinds.Phone.NUMBER;
private static final String PHONE_CONTACT_ID = ContactsContract.CommonDataKinds.Phone.CONTACT_ID;
public static ArrayList<String> getAll(Context context) {
ContentResolver cr = context.getContentResolver();
Cursor pCur = cr.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
new String[]{PHONE_NUMBER, PHONE_CONTACT_ID},
null,
null,
null
);
if(pCur != null){
if(pCur.getCount() > 0) {
HashMap<Integer, ArrayList<String>> phones = new HashMap<>();
while (pCur.moveToNext()) {
Integer contactId = pCur.getInt(pCur.getColumnIndex(PHONE_CONTACT_ID));
ArrayList<String> curPhones = new ArrayList<>();
if (phones.containsKey(contactId)) {
curPhones = phones.get(contactId);
}
curPhones.add(pCur.getString(pCur.getColumnIndex(PHONE_NUMBER)));
phones.put(contactId, curPhones);
}
Cursor cur = cr.query(
ContactsContract.Contacts.CONTENT_URI,
new String[]{CONTACT_ID, HAS_PHONE_NUMBER},
HAS_PHONE_NUMBER + " > 0",
null,null);
if (cur != null) {
if (cur.getCount() > 0) {
ArrayList<String> contacts = new ArrayList<>();
while (cur.moveToNext()) {
int id = cur.getInt(cur.getColumnIndex(CONTACT_ID));
if(phones.containsKey(id)) {
contacts.addAll(phones.get(id));
}
}
return contacts;
}
cur.close();
}
}
pCur.close();
}
return null;
}
不適合在這裏,你永遠不會使用PHONE_NUMBER。我認爲你有一個PHONE_CONTACT_ID,你應該有PHONE_NUMBER – 2016-12-20 16:48:08
@GregEnnis我現在無法檢查,但我認爲你是對的。我會編輯我的答案 – 2016-12-21 14:06:27
除此之外,代碼很好。謝謝 – 2016-12-22 14:45:46
- 1. Android聯繫人 - 獲取電話號碼
- 2. 獲取聯繫人的所有號碼(電話)? (在Android 2.1)
- 3. 獲取聯繫人的所有電話號碼Xamarin.Android
- 4. 獲取Android中所有具有電話號碼的聯繫人詳細信息
- 5. 從聯繫人獲取所有電話號碼
- 6. 如何從android中的聯繫人獲取電話號碼
- 7. Mono for Android - 從聯繫人中獲取電話號碼
- 8. Android SDK-獲取特定聯繫人的電話號碼
- 9. 從聯繫人獲取基於名稱的電話號碼Android
- 10. 獲取聯繫人的電話號碼Android 1.5
- 11. Android的聯繫人列表獲取電話號碼
- 12. 從電話簿獲取聯繫人姓名使用號碼 - Android
- 13. Android:使用電話號碼獲取聯繫人姓名
- 14. 如何從Android設備獲取電話號碼聯繫人
- 15. 使用ContentProvider從聯繫人獲取電話號碼 - Android
- 16. 如何從聯繫人中讀取Android中的電話號碼?
- 17. 如何獲取所有聯繫人全名和電話號碼,僅當他們有電話號碼?
- 18. 什麼是有效的方式來獲取聯繫人的所有聯繫人姓名和電話號碼API
- 19. 從一個聯繫人獲取所有電話號碼並在edittext中設置
- 20. 如何從所選聯繫人中提取電話號碼?
- 21. 如何從android中的聯繫人獲取聯繫人號碼?
- 22. 所有具有多個電話號碼的聯繫人
- 23. 獲取聯繫電話號碼
- 24. 無法從聯繫人列表中獲取電話號碼...
- 25. startActivityForResult的一個聯繫人的所有電話號碼
- 26. 如何轉儲聯繫人的所有電話號碼?
- 27. 查詢聯繫人的所有電話號碼
- 28. 如何使用電話號碼獲取所有聯繫人姓名?
- 29. 查找聯繫人的電話號碼
- 30. 通過電話號碼獲取正確的聯繫人姓名
什麼是聯繫人合同 – PSR 2013-03-06 09:22:14
此問題已在[本] [1]主題中回答。請檢查一下。 [1]:http://stackoverflow.com/a/12562234/1773155 – 2013-03-06 09:34:41
肯定會套用你的需求使用[android-contact-extractor library](https://github.com/nitiwari-dev/android-接觸器) – nitesh 2017-05-12 10:05:56