2011-12-19 2 views
3

Я пытаюсь получить все мои контакты как vCard.Получение всех контактов как vcard в Android

Так что это мой код:


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» (мама), и этот код не распознает его. Все другие имена, такие как «António», не отображаются.

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

ответ

1

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

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

+0

Спасибо за ответ. Happy Holidays =) –

2

Если вы хотите использовать «встроенный» андроид классов для генерации 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; 

} 

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

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

+0

Это сработало для меня! Отличная экономия времени! – Markw

Смежные вопросы