让我们快速而准确。 我正在寻找一种方法,从我选择的联系人那里获取一个vCard字符串,并通过意图传递给我的应用程序。
首先,我打算打开电话簿并选择一个联系人,如您在此代码中所见,
mContext.startActivityForResult(new Intent(Intent.ACTION_GET_CONTENT).setType(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE), 1);
选择联系人后,结果将在此处捕获的意图中删除
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) { // RQS_PICK_CONTACT = 1
if (resultCode == RESULT_OK) {
Uri contactData = data.getData();
Cursor cursor = managedQuery(contactData, null, null, null, null);
cursor.moveToFirst();
vCard = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));
System.out.println(vCard);
}
}
}
在此示例中,我只获取为此联系人保存的号码。 但我的目标是在一个vCard字符串中声明整个细节,或者允许我将其转换为vCard的其他格式。
答案 0 :(得分:0)
我可以设法用这条简单的行声明vCard
Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_VCARD_URI, lookupKey);
以下是将vCard作为String
的完整代码public string vCard(Intent data){
Uri contactData = data.getData();
Cursor cursor = managedQuery(contactData, null, null, null, null);
cursor.moveToFirst();
String lookupKey = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));
Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_VCARD_URI, lookupKey);
AssetFileDescriptor fd;
String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String nummer = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));
try {
fd = getContentResolver().openAssetFileDescriptor(uri, "r");
FileInputStream fis = fd.createInputStream();
byte[] buf = new byte[(int) fd.getDeclaredLength()];
fis.read(buf);
return new String(buf); //vCard from buffer
} catch (Exception e) {
Toast.makeText(this, "Failed to load Contact: " + name, Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
return null;
}