获取没有照片的手机通讯录,以便将它们保存在DataOutputStream(vcf格式)中

时间:2014-02-19 13:34:54

标签: java android android-contacts contactscontract

我有一个应用程序,可以将电话联系人以vcf格式导出到SD卡。

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

那么任何想法如何让联系人没有他们的照片以便以vcf格式将它们保存在外部存储上?

提前致谢

1 个答案:

答案 0 :(得分:2)

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


Pre API等级14

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

library可能会有所帮助。