尝试将联系人转换为Vcard时出现FileNotFoundException

时间:2010-03-31 11:26:24

标签: android

我正尝试使用下面的代码将模拟器上的联系人转换为VCard格式

AssetFileDescriptor afd = openAssetFileDescriptor(Contacts.CONTENT_VCARD_URI,“r”)

堆栈Trace说 java.io.FileNotFoundException内容中没有文件://com.android.contacts/contacts/as_vcard

我们需要将文件附加到URI吗?还有其他方法可以在Android中将联系人转换为Vcard吗?

2 个答案:

答案 0 :(得分:2)

您必须遍历联系人db并分别在每个上调用openAssetFileDescriptor()。重要的是,您必须使用每个联系人的查找键,并使用URI.withAppendedPath()方法将其附加到CONTENT_VCARD_URI。

答案 1 :(得分:1)

我也偶然发现了这个。这是一种方法。第一个让用户选择他的联系人或以另一种方式获得联系方式。

在您拥有contactUri之后,您查找了lookup_key,之后您可以检索vcard。这是我获得contactUri之后使用的代码(来自不同函数的复制粘贴,但是应该可以工作)。

Cursor cursor = resolver.query(contactUri, new String[] {
    Contacts.LOOKUP_KEY
}, null, null, null);
FileInputStream input = null;

try {
    if (cursor.moveToFirst()) {
        return cursor.getString(0);
    } else return;

    AssetFileDescriptor afd = context.getContentResolver().openAssetFileDescriptor(
            Uri.withAppendedPath(Contacts.CONTENT_VCARD_URI, lookupKey), "r");
    input = afd.createInputStream();

    int ch;
    StringBuffer strContent = new StringBuffer("");
    while ((ch = input.read()) != -1)
        strContent.append((char) ch);

    Log.d(TAG, strContent.toString());
} finally {
    cursor.close();
    if (input != null) {
        input.close();
    }
}