android 以vcf格式提取联系人列表

imzjd6km  于 2023-06-04  发布在  Android
关注(0)|答案(3)|浏览(211)

我如何运行Android方法来提取VCF格式的联系人列表?
有没有一个意图可以直接调用这个动作?

mkshixfv

mkshixfv1#

以下是如何提取到VCF文件并通过Intent共享它,如果您愿意,可以选择共享单个联系人:

@WorkerThread
    @Nullable
    public static Intent getContactShareIntent(@NonNull Context context, @Nullable String contactId, @NonNull String filePath) {
        final ContentResolver contentResolver = context.getContentResolver();
        Cursor cursor = TextUtils.isEmpty(contactId) ? contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null) :
                contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, Data.CONTACT_ID + "=?", new String[]{contactId}, null);
        if (cursor == null || !cursor.moveToFirst())
            return null;
        final File file = new File(filePath);
        file.delete();
        do {
            String lookupKey = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));
            Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_VCARD_URI, lookupKey);
            AssetFileDescriptor fd;
            try {
                fd = contentResolver.openAssetFileDescriptor(uri, "r");
                if (fd == null)
                    return null;
                FileInputStream fis = fd.createInputStream();
                IOUtils.copy(fis, new FileOutputStream(filePath, false));
                cursor.moveToNext();
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        } while (cursor.moveToNext());
        Intent intent = new Intent(Intent.ACTION_SEND);
        intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
        intent.setType("*/*");
        return intent;
    }
chy5wohz

chy5wohz2#

您可以在联系人应用程序中手动执行此操作。但没有意图。如果你想让你的应用程序有这样的导出,你必须自己写或者使用这里的代码。vcardio

zlwx9yxi

zlwx9yxi3#

2016年9月,这一情况发生了变化。现在,您可以使用“联系人”应用程序将联系人导出到VCF文件:在菜单中选择“导入/导出”,然后选择其中一个导出项。您仍然需要从手机上获取文件,但通过ADB(或电子邮件)很容易。

相关问题