我正在尝试从 Android 联系人列表中检索联系人的姓名、电话号码和地址。名称和电话非常简单,但地址似乎无法通过 1.6 api 级别访问。

有人知道如何获取联系人的地址吗?2.0 中还有一个全新的 api。我如何利用这一点并通过使用 1 个二进制文件回退到旧的 api。如果可能的话。

有帮助吗?

解决方案

在 Android 2.0 之前,您需要查询 Contacts.ContactMethods.CONTENT_URI 来获取您需要传递的邮政地址

Contacts.ContactMethods.PERSON_ID + "=? and " + Contacts.ContactMethods.KIND + "=?"

对于选择和 selectArgs 参数:

new String[] { personId, Integer.toString(Contacts.KIND_POSTAL) }

从 2.0 开始,您使用新的 ContactsContract,它要复杂得多,因为联系人现在可以跨多个来源聚合信息。关于新 API 的一些很好的群组帖子是 这里这里.

从同一个二进制文件定位多个平台 API 的推荐方法是使用反射(请参阅此 博客文章)。我发现,如果您在清单中将应用程序定位为 1.6 或更低版本,但设置构建路径来获取 Android 2.0 jar 文件,则可以调用 2.0 api,而无需反射。您只需要非常小心,不要在 1.6 设备中加载依赖于 2.0 类的类,否则类加载器将抛出异常。为了避免这种情况,您需要使用某种工厂来打破依赖关系(或像 Guice 这样的 DI 框架)。看到这个 发帖 以便进一步讨论。

其他提示

由于安东尼Forloney(下面 ),用于链接“如何读取联系人”,这是有用的。为了延长的链接的内容,用的代码如何读“地址”,这些线路应该帮助!他们应该通过查询获取邮寄地址,正如你看到的,在 StructuredPostal contants。

            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();

的链接其余确实取名字和电话(当你纠正“有电话号码”为布尔值的错误 - 布尔没有得到正确解析)

在我的手机自动取款机,但这里是一个链接类似你的问题。

我希望这可以帮助或点你在正确的方向。

编辑:

我曾提到过,我会编辑我原来的答案,至少对你要找的东西,这可能是邪恶的后期,你有你的答案了,不过这里是详细信息,如果你还在寻找一些,你需要什么要寻找的是 ContactsContract.CommonDataKinds.StructuredPostal 和你可以提取关于地址的具体细节。作为此处使用Android 2.0 一个例子示出了一些示例中提取从联系人信息,那就是如果你还没有意识到这一点了。

好运。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top