Jer*_*rds 1 android import-contacts addressbook google-contacts-api
我正在尝试从Android联系人列表中检索联系人的姓名,电话号码和地址.名称和电话非常简单,但1.6 api级别的地址似乎无法访问.
有人想出如何获得联系人的地址吗?2.0中还有一个全新的api.如何通过使用1二进制来利用这个并回退到旧的api.如果这是可能的.
在Android 2.0之前,您需要查询Contacts.ContactMethods.CONTENT_URI以获取您需要传递的邮政地址
Contacts.ContactMethods.PERSON_ID + "=? and " + Contacts.ContactMethods.KIND + "=?"
Run Code Online (Sandbox Code Playgroud)
用于选择和selectArgs参数:
new String[] { personId, Integer.toString(Contacts.KIND_POSTAL) }
Run Code Online (Sandbox Code Playgroud)
从2.0开始,您使用新的ContactsContract,它更加复杂,因为联系人现在可以在多个来源之间汇总信息.关于新API的一些好的小组发布在这里和这里.
从同一二进制文件中定位多个平台API的推荐方法是使用反射(请参阅此博客文章).我发现如果您在清单中将应用程序定位在1.6或更低,但设置构建路径以获取Android 2.0 jar文件,您可以调用2.0 apis而无需反射.您只需要非常小心,依赖于2.0类的类不会加载到1.6设备中,否则类加载器将抛出.为了避免这种情况,你需要使用某种工厂来破坏依赖关系(或像Guice这样的DI框架).有关进一步讨论,请参阅此帖子
感谢 Anthony Forloney(如下)提供的“如何阅读通讯录”的链接,这很有用。要扩展该链接的内容,使用如何读取“地址”的代码,这些行应该有所帮助!正如您所看到的,他们应该通过使用StructuredPostal内容进行查询来获取邮政地址。
Cursor postals = getContentResolver().query(
ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.StructuredPostal.CONTACT_ID + " = "
+ contactId, null, null);
int postFormattedNdx = postals.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS);
int postTypeNdx = postals.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE);
int postStreetNdx = postals.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET);
while (postals.moveToNext()) {
String postalData = postals.getString(postFormattedNdx);
postalCat = postalCat+ postalData+ ", [";
postalData = String.valueOf(postals.getInt(postTypeNdx));
postalCat = postalCat+ postalData+ "], ";
postalData = postals.getString(postStreetNdx);
postalCat = postalCat+ postalData+ " ";
}
postals.close();
Run Code Online (Sandbox Code Playgroud)
该链接的其余部分确实获取了姓名和电话(当您更正布尔值的“有电话号码”错误时 - 布尔值无法正确解析)
| 归档时间: |
|
| 查看次数: |
18253 次 |
| 最近记录: |