我正在尝试将所有联系人都设为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”的名称都没有出现.
我在这个问题上停留了很长时间.
解决方法:
获取VCard的最佳方法是编写自己的函数来创建VCard.如果Contacts不是英语,则您使用的方法会出现问题.
手动获取联系人的所有字段并将其写入您的VCard文件.
标签:vcard,android-contacts,android
来源: https://codeday.me/bug/20191202/2084725.html