java - 获取没有照片的电话联系人,以便将它们保存在 DataOutputStream(vcf 格式)中

标签 java android android-contacts contactscontract

我有一个应用程序可以将手机联系人以 vcf 格式导出到 sdcard。

我能够获取所有 vcard 并将它们保存为 vcf 格式(在每个 ContactsContract.Contacts.LOOKUP_KEY 上循环直到达到光标计数 -1 以便将 vcard 与每个在 AssetFileDescriptor 中联系,然后使用 getContentResolver().openAssetFileDescriptor(....) 转换为 FileInputStream)。问题是现在我需要保存 vcards 没有照片。

那么知道如何获取联系人没有他们的照片,以便以 vcf 格式将它们保存在外部存储中吗?

提前致谢

最佳答案

API 级别 14 +

如果您查看 ContactsContract.java 的来源,您可以看到他们引入了一种排除联系人照片的新方法。

/**
 * Boolean parameter that may be used with {@link #CONTENT_VCARD_URI}
 * and {@link #CONTENT_MULTI_VCARD_URI} to indicate that the returned
 * vcard should not contain a photo.
 *
 * @hide
 */
 public static final String QUERY_PARAMETER_VCARD_NO_PHOTO = "nophoto";

常量对 API 是隐藏的 (@hide),但您仍然可以利用它。

获取查找键后,您可以使用以下代码获取“nophoto”vcard Uri:

String lookupKey = cursor.getString(
                 cursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));
Uri vcardUri = ContactsContract.Contacts.CONTENT_VCARD_URI
             .buildUpon().appendQueryParameter("nophoto", String.valueOf(true))
             .build();
Uri uri = Uri.withAppendedPath(vcardUri, lookupKey);


API 级别 14 之前

您唯一的解决方案是使用联系信息构建您自己的电子名片。

library可能有帮助。

关于java - 获取没有照片的电话联系人,以便将它们保存在 DataOutputStream(vcf 格式)中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21882079/

相关文章:

java - 我们如何使用java流迭代多个列表并调用setter方法

android - 将 ServerValue.TIMESTAMP 转换为日期

android - 如何在添加帐户时自动同步联系人?

android - 插入联系意向、多个电话/电子邮件/等类型?

java - 如何在java中的mongodb现有文档中插入内部文档?

java - Mockito stub 错误的方法

javascript - 如何在没有任何基于触摸的屏幕/设备的情况下测试基于 JavaScript 的触摸事件?

android - 在 SDK 工具中启动 Android 模拟器,修订版 12

android - 这是如何正确地将照片设置为地址簿上的联系人?

java - 如何在本地测试EJB