gpt4 book ai didi

Android获取联系人姓名和号码查询

转载 作者:行者123 更新时间:2023-11-29 04:12:55 27 4
gpt4 key购买 nike

我正在尝试检索所有联系人的显示名称和电话号码,但我希望它只返回具有数字的行。

目前我有这样的并且它有效:

ContentResolver cr = getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,null, null, ContactsContract.Contacts.DISPLAY_NAME+ " COLLATE NOCASE");
while (cur.moveToNext())
{
if ( Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)
{
String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
contacts[index] = name;

Cursor pCur = cr.query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", new String[]{id}, null);
pCur.moveToFirst();
numbers[index] = pCur.getString( pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
index++;
pCur.close();
}

问题是它在运行 cr.query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +"= ? ", new String[]{id}, null); 大约 400 次。


现在我的理解是联系人的姓名和号码保存在不同的表中,您需要姓名的 ID 才能获取号码。

可以用其他任何方式更快地完成吗?

提前致谢

最佳答案

@mixkat我想出了另一种解决方案。

只需一次查询就可以获取姓名和电话数据。

代码如下:

    String WHERE_CONDITION = ContactsContract.Data.MIMETYPE + " = '" +   ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE + "'";
String[] PROJECTION = {ContactsContract.Data.DISPLAY_NAME, ContactsContract.Data.DATA1};
String SORT_ORDER = ContactsContract.Data.DISPLAY_NAME;

Cursor cur = context.getContentResolver().query(
ContactsContract.Data.CONTENT_URI,
PROJECTION,
WHERE_CONDITION,
null,
SORT_ORDER);

在这种情况下,您查询的不是 Contact provider,而是 Data provider。

关于Android获取联系人姓名和号码查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5485940/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com