从Contactdata Intent获取vCard - Android

时间:2014-06-01 21:57:43

标签: android android-intent android-contacts vcard

让我们快速而准确。 我正在寻找一种方法,从我选择的联系人那里获取一个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的其他格式。

1 个答案:

答案 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; 
}