如何使用电子邮件和/或电话号码查询 Android 2.x 联系人?
Posted
技术标签:
【中文标题】如何使用电子邮件和/或电话号码查询 Android 2.x 联系人?【英文标题】:How to query Android 2.x Contacts with Emails and/or Phone Numbers? 【发布时间】:2011-06-04 08:13:39 【问题描述】:让我们暴力破解您的普通 android 2.x 可见联系人 ID/姓名光标(通过 ContactsContract):
Cursor c = getContentResolver().query(
Contacts.CONTENT_URI,
new String[] Contacts._ID, Contacts.DISPLAY_NAME ,
Contacts.IN_VISIBLE_GROUP + " = '1'",
null,
Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"
);
有没有办法过滤这个以获取只有至少一个电子邮件和/或电话号码的联系人?
我发现我可以使用 Contacts.HAS_PHONE_NUMBER ...但我在任何地方都看不到 HAS_EMAIL。 (告诉我这不会变得丑陋。)
【问题讨论】:
【参考方案1】:查询相应的内容提供者Uri
。例如,android.provider.ContactsContract.CommonDataKinds.Email
允许您获取电子邮件地址,并且您的其他列(例如,IN_VISIBLE_GROUP
)被隐式加入。
Here is a sample project 演示使用这些其他内容提供程序 Uri 值。
【讨论】:
马克来了!非常感谢。我将带 Spinners 进行一次,嗯,旋转。不过,我应该澄清一下。我意识到我总是可以单独浏览联系人,但我试图一口气获得过滤列表。 @Joe D'Andrea:“但我试图一举获得过滤后的列表”......这就是我提供的示例所展示的。当您查询像CommonDataKinds.Email
这样的“辅助”“表”时,您需要利用 ContactsContract
内容提供程序提供的隐式连接。
完美。这就是我所缺少的 - 隐式连接。 (现在尝试让 Eclipse 导入项目!)
@Joe D'Andrea:是的,这就是我不喜欢内容提供商的原因之一——你自己没有办法加入,而且你依靠有限的文档来找出可以代表您完成的连接。
@CommonsWare:叹息,是的,这很令人沮丧。我想我需要搞砸 managedQuery 只是为了看看 SQL 是什么并从那里进行逆向工程。我本质上是在尝试编写一个 buildEmailPhonesAdapter,也就是说,我想用电子邮件和/或电话号码来提取联系人,而不是分开。我确定我错过了隐式连接。例如,我认为仅将 Phone.NUMBER 添加到电子邮件适配器 PROJECTION 是不够的 - 除了可能是错误的(那些有电话号码但没有电子邮件的人呢?)。【参考方案2】:
我只是枚举了在联系人上获取的光标上的列:
Cursor c = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
String[] names = c.getColumnNames();
for (String string : names)
Log.d("ContactList", "RC column " + string);
c.close();
结果包含has_email
。不过,它可能是特定于银河选项卡的。
【讨论】:
以上是关于如何使用电子邮件和/或电话号码查询 Android 2.x 联系人?的主要内容,如果未能解决你的问题,请参考以下文章