Как Android хранить данные контакта Vcard? - PullRequest
0 голосов
/ 10 января 2012

Обычно мы используем этот код для чтения данных v-карты контакта.

 AssetFileDescriptor afd = context.getContentResolver().openAssetFileDescriptor(
            Uri.withAppendedPath(Contacts.CONTENT_VCARD_URI, lookupKey), "r");

где данные V-карты хранятся физически? Я посмотрел на contacts2.db и его там тоже нет?

Кто-нибудь знает, как работает openAssetFileDescriptor

Ответы [ 3 ]

0 голосов
/ 06 апреля 2012
AssetFileDescriptor fd = mContext.getContentResolver()
                        .openAssetFileDescriptor(uri, "r");

                BufferedInputStream fips = new BufferedInputStream(
                        fd.createInputStream());
                byte[] byteOneLine = new byte[8*1024];
                while(fips.read(byteOneLine) != -1){
                    output_.write(byteOneLine);
                }

, где output_ является экземпляром OutputStream.

Однако выполнение «mContext.getContentResolver () openAssetFileDescriptor (uri,« r »)» займет очень много времени.когда у меня 600 контактов, это тратит 20 секунд.

В поисках лучшего метода.

0 голосов
/ 25 февраля 2014

Простой и чистый способ:

Проверьте мой ответ здесь для более подробной информации: ответ

Код:

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;

}
0 голосов
/ 10 января 2012

Android создает VCards при необходимости, получая информацию, используя Контакты APIS Я не думаю, что они хранятся как VCards во внутренней памяти. Вы можете пройти через пакет android.pim.vcard и получить более подробную информацию Посмотрите на VCardComposer.java, VCardBuilder.java

...