gpt4 book ai didi

android - 如何检索每个可能的联系人?

转载 作者:行者123 更新时间:2023-11-29 01:00:02 25 4
gpt4 key购买 nike

有多个示例说明我们如何在 android 中检索联系人,最常见的类型是使用 ContactsContract,如下所示:

ContentResolver resolver = getContentResolver();
Cursor cursor = resolver.query(ContactsContract.contacts.CONTENT_URI,null,null,null,null);

while(cursor.moveToNext){
//get contact details
.........

}

我的问题:

如果用户可以将他们的联系人保存在三个地方phoneSIMgoogle_account。那么我如何能够使用一种方法来检索用户在手机上拥有的所有号码?

另外,手机中的联系人列表重复联系人,我们如何避免联系两次或四次或五次?

一次覆盖所有可能的联系人必须使用什么方法?

最佳答案

用户实际上可以在很多地方保存联系人,而不仅仅是 3 个,例如如果用户安装了 Yahoo 应用程序,他们也可以开始在 Yahoo 上存储联系人,同样适用于 Outlook 等。

ContactsContract 涵盖了所有这些选项,并提供了一个 API 来查询存储在设备上的所有联系人。不同的存储类型由 RawContact 级别的 ACCOUNT_NAMEACCOUNT_TYPE 区分。

您从查询中获得的 Contact 结果实际上是来自一个或多个来源或 ACCOUNT_TYPE 的多个 RawContact 的聚合,因此您的 SIM 卡和手机上的重复 RawContact应该聚合成一个Contact

下面是一些代码,用于在您的设备上浏览您自己的联系人(这是非常慢的代码,有一些方法可以显着提高性能):

String[] projection = new String[] { Contacts._ID, Contacts.DISPLAY_NAME};
Cursor contacts = resolver.query(ContactsContract.Contacts.CONTENT_URI, projection, null, null, null);

while (contacts.moveToNext()) {

long contactId = contacts.getLong(0);
String name = contacts.getString(1);

Log.i("Contacts", "Contact " + contactId + " " + name + " - has the following raw-contacts:");

String[] projection2 = new String[] { RawContacts._ID, RawContacts.ACCOUNT_TYPE, RawContacts.ACCOUNT_NAME };
Cursor raws = resolver.query(RawContacts.CONTENT_URI, null, RawContacts.CONTACT_ID, null, null);

while (raws.moveToNext()) {

long rawId = raws.getLong(0);
String accountType = raws.getString(1);
String accountName = raws.getString(2);

Log.i("Contacts", "\t RawContact " + rawId + " from " + accountType + " / " + accountName);
}
raws.close();
}
contacts.close();

关于android - 如何检索每个可能的联系人?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51919125/

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