gpt4 book ai didi

android - 在 Android 中获取所有联系人作为 vcard

转载 作者:太空狗 更新时间:2023-10-29 12:54:13 27 4
gpt4 key购买 nike

我正在尝试将我所有的联系人作为 vCard。

所以这是我的代码:


public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ContentResolver cr = getContentResolver();

Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
null, null, null, null);
if (cur.getCount() > 0) {
//cur.moveToFirst();
while (cur.moveToNext()) {
try{
String lookupKey =
cur.getString(cur.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));
Uri uri =
Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_VCARD_URI,
lookupKey);
AssetFileDescriptor fd =
this.getContentResolver().openAssetFileDescriptor(uri, "r");
FileInputStream fis = fd.createInputStream();

byte[] buf = new byte[(int)fd.getDeclaredLength()];
if (0 < fis.read(buf))
{
String vCard = new String(buf);
System.out.println("The vCard value is " + vCard);
}
fis.close();
}
catch(Exception e)
{
System.out.println(e.getStackTrace());
}
}
}
cur.close();
System.out.println(cur.getCount());
}
}

这给了我几乎所有的联系人,但它没有返回一些包含一些特殊字符的联系人,在葡萄牙语中我们说“mãe”(妈妈)并且此代码无法识别它。所有其他名字,如“António”似乎都没有出现。

我在这个问题上卡了很久。

最佳答案

如果您想使用“内置的”android 类来生成您的电子名片,那非常简单。

public ArrayList<String> getContactsAsVcards()
{
ArrayList<String> vcards = new ArrayList<String>();
VCardComposer vCardComposer = new VCardComposer(context);

vCardComposer.init();

do {
String vCard = vCardComposer.createOneEntry();

vcards.add(vCard);
} while (!vCardComposer.isAfterLast());

return vcards;

}

您只需从 android 源代码下载 android 类,并以正确的包名 com.android.vcardcom.android.vcard 将它们添加到您的项目中。异常。您可以从 here 下载类(class)。 .这是针对 Android 4.4 r1 版本的。

可能对你来说来晚了,但如果有人正在寻找一种更强大和更好的方法来从他们的联系人列表中获取 vcards 并让 android 在内部处理所有工作,这就是 IMO。

关于android - 在 Android 中获取所有联系人作为 vcard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8566363/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com