Получение всех контактов как vcard в Android - PullRequest
3 голосов
/ 19 декабря 2011

Я пытаюсь получить все свои контакты как 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» (мама), и этот код не распознает его.Все остальные имена, такие как «Антонио», не отображаются.

Я застрял в этом надолго.

Ответы [ 2 ]

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

Если вы хотите использовать «встроенные» классы android для генерации ваших vcards, то это довольно просто.

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;

}

Вам просто нужно скачать классы android из исходного кода android и добавить ихв ваш проект под правильным именем пакета, com.android.vcard и com.android.vcard.exception.Вы можете скачать классы с здесь .Это для версии Android 4.4 r1.

Возможно, поздно для вас, но в случае, если кто-то ищет более надежный и приятный способ получить визитные карточки из своего списка контактов и позволить Android самостоятельно позаботиться обо всей работе.вот оно ИМО.

1 голос
/ 20 декабря 2011

Лучший способ получить VCard - написать свою собственную функцию для создания VCard. При использовании Контактов возникают проблемы, когда Контакты не на английском языке. Получите все поля контакта вручную и запишите его в файл VCard.

Взгляните на https://code.google.com/p/android-vcard/ для чтения и записи на VCard

...